# Attriboo CLI documentation

Canonical: https://www.attriboo.com/developers/cli

Official version: 0.1.5. Requires Node.js >=20. The download is hosted by Attriboo; no npm account is required.

```bash
npm install -g https://www.attriboo.com/downloads/attriboo-cli-0.1.5.tgz
attriboo --version
attriboo login
attriboo sites list
```

Default login approves analytics:read. Run login --setup for separate owner/admin sites:write approval. The loopback sign-in browser must run on the same computer. A private ATTRIBOO_API_KEY overrides saved OAuth and cannot use setup endpoints.

JSON output is the API data directly, without the REST envelope. Default JSON is formatted; --json is compact. --csv exports the main returned row collection, not every continuation page. Nested values remain JSON cells. Do not combine --json and --csv. sites script prints raw code unless an output format is selected.

Exit codes: 0 = command completed; 1 = command/input/auth/request failure; 2 = sites verify waiting or paused. Errors use stderr with an Attriboo: prefix. Check $? in Bash or $LASTEXITCODE in PowerShell.

Money remains integer cents. Report dates use UTC and custom from/to are inclusive. Follow returned next_cursor values with the same selection; a row limit does not limit totals. Do not assume an absent cursor proves a complete export.

## Environment and credentials

- ATTRIBOO_API_KEY: Private workspace key. Takes precedence over saved OAuth credentials; can read reports but cannot authorize website setup.
- ATTRIBOO_URL: Service origin. Defaults to https://www.attriboo.com. Only HTTPS or loopback HTTP is accepted; no path, query, fragment or embedded credentials.
- ATTRIBOO_CONFIG_DIR: Private alternative directory containing credentials.json.
- LOCALAPPDATA: Windows default credentials directory: %LOCALAPPDATA%/Attriboo/credentials.json; falls back to the user home when unavailable.
- XDG_CONFIG_HOME: Non-Windows default credentials directory: $XDG_CONFIG_HOME/attriboo/credentials.json; otherwise ~/.config/attriboo/credentials.json.

Credentials are kept privately under the user profile. OAuth refresh tokens rotate. Logout revokes the saved session and removes its file; failed revocation retains the file for retry. It does not remove an environment key. Saved credentials are not sent to another service origin.

## attriboo --help

Print the installed CLI's command list and supported options.

Access: No sign-in required

### Options


### Show help

```bash
attriboo --help
```

Excerpt from the full help output.

Illustrative output:

```text
Attriboo CLI 0.1.5 · Follow the money.

Install: npm install -g https://www.attriboo.com/downloads/attriboo-cli-0.1.5.tgz
Requires Node.js >=20. No npm account is needed.

attriboo login                         Browser sign-in for reports
attriboo login --setup                 Separately approve website setup
```

Running attriboo with no arguments also prints help. --help can be used with a command but currently prints the global help, rather than a separate command-specific help page.

## attriboo --version

Print the installed CLI version.

Access: No sign-in required

### Options


### Check the version

```bash
attriboo --version
```

Illustrative output:

```text
0.1.5
```

To update, rerun the installation command from the CLI overview. The published download is hosted by Attriboo; an npm registry release is not implied.

## attriboo login

Open browser sign-in and save the approved workspace's rotating OAuth credentials.

Access: Account-holder sign-in and approval

### Options

- --setup: Request analytics:read sites:write for owner/admin website setup.
- --no-browser: Print the sign-in link instead of opening it automatically. Open it on the same computer.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Sign in for reports

```bash
attriboo login
```

Illustrative output:

```text
{
  "signed_in": true,
  "scope": "analytics:read"
}
```

### Approve website setup

```bash
attriboo login --setup
```

Illustrative output:

```text
{
  "signed_in": true,
  "scope": "analytics:read sites:write"
}
```

### Open the link yourself

```bash
attriboo login --no-browser
```

The sign-in URL is printed on stderr. This result is printed only after approval finishes.

Illustrative output:

```text
{
  "signed_in": true,
  "scope": "analytics:read"
}
```

Requires the Node.js version shown on the CLI overview. Login uses PKCE and a temporary loopback callback. The browser must run on the same computer as the CLI; this is not device-code login.

Default sign-in reads reports. Setup requires a fresh owner/admin approval. A previous report-only grant is not silently upgraded.

The local sign-in attempt times out after three minutes. If it expires, run login again. Never share the authorization URL or the saved credentials.

A privately configured ATTRIBOO_API_KEY takes precedence over saved OAuth credentials. Remove that environment override when you intend to use setup OAuth.

## attriboo logout

Revoke the saved OAuth session and remove its local credentials file.

Access: Uses the saved session, if present

### Options

- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Disconnect this CLI session

```bash
attriboo logout
```

Illustrative output:

```text
{
  "signed_out": true,
  "environment_key_unchanged": false
}
```

If revocation fails, credentials remain so logout can be retried. Apps can also be disconnected in Settings → API & MCP → Connected AI apps.

An ATTRIBOO_API_KEY environment value is not revoked or removed by logout. environment_key_unchanged is true when that override is present.

## attriboo whoami

Show the workspace and websites associated with the active credential.

Access: OAuth analytics:read or workspace key

### Options

- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Check the current workspace

```bash
attriboo whoami
```

Illustrative output:

```text
{
  "workspace": "Example workspace",
  "sites": [
    {
      "id": "site_example",
      "domain": "shop.example.com",
      "currency": "USD",
      "name": "Example shop",
      "timezone": "UTC"
    }
  ]
}
```

### Output fields

- workspace: Workspace name.
- sites: Websites available to this connection.
  - id: Website ID.
  - domain: Domain.
  - name: Website name.
  - currency: Website currency.
  - timezone: Saved IANA timezone.

[Full output field definitions](https://www.attriboo.com/developers/sites)

Returns workspace and sites, not an account profile or an email address. It uses the same GET /sites operation as sites list.

## attriboo sites list

Discover the real website IDs, domains, currencies and timezones in your workspace.

Access: OAuth analytics:read or workspace key

### Options

- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### List websites as JSON

```bash
attriboo sites list --json
```

Illustrative output:

```text
{"workspace":"Example workspace","sites":[{"id":"site_example","domain":"shop.example.com","currency":"USD","name":"Example shop","timezone":"UTC"}]}
```

### Output fields

- workspace: Workspace name.
- sites: Websites available to this connection.
  - id: Website ID.
  - domain: Domain.
  - name: Website name.
  - currency: Website currency.
  - timezone: Saved IANA timezone.

[Full output field definitions](https://www.attriboo.com/developers/sites)

Choose a returned website ID or domain for subsequent reports. A workspace with multiple websites requires explicit site selection.

## attriboo sites add

Create or reuse a website after confirming its details with the account holder.

Access: OAuth analytics:read sites:write; workspace owner/admin

### Options

- --domain (required): Public domain or HTTP(S) address.
- --confirm (required): Required confirmation of the account holder's website details.
- --name: Website name; defaults to the domain.
- --currency: Supported three-letter currency. Default: USD.
- --timezone: IANA timezone. Default: UTC.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Add a confirmed website

```bash
attriboo sites add --domain shop.example.com --name "Example shop" --currency USD --timezone UTC --confirm
```

Illustrative output:

```text
{
  "site": {
    "id": "site_example",
    "domain": "shop.example.com",
    "currency": "USD",
    "name": "Example shop",
    "timezone": "UTC"
  },
  "created": true
}
```

### Output fields

- site: Returned website details.
- created: Whether a website was created.

[Full output field definitions](https://www.attriboo.com/developers/create-website)

Run attriboo login --setup first. Existing workspace keys cannot call this operation. Confirm domain, name, currency and timezone before passing --confirm.

The current plan's website allowance is enforced. Repeated requests for the same domain reuse the existing website. This does not purchase an upgrade or connect payments.

## attriboo sites script

Retrieve a real website's snippet with its saved tracking and consent choices.

Access: OAuth analytics:read sites:write; workspace owner/admin

### Options

- --site (required): Website ID or domain from sites list.
- --format: Snippet format. Values: html, gtm, nextjs, astro, nuxt, jsx, gatsby, docusaurus, drupal. Default: html.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Print the installation snippet

```bash
attriboo sites script --site shop.example.com --format html
```

Illustrative output:

```text
<script defer data-auto-identify="false" data-consent="required" data-site-id="site_example" src="https://www.attriboo.com/t.js"></script>
```

### Inspect snippet metadata as JSON

```bash
attriboo sites script --site shop.example.com --format html --json
```

Illustrative output:

```text
{"site":"site_example","domain":"shop.example.com","format":"html","script":"<script defer data-auto-identify=\"false\" data-consent=\"required\" data-site-id=\"site_example\" src=\"https://www.attriboo.com/t.js\"></script>","preferences":{"mode":"standard","consent":"required","captureEmails":false,"visitorEstimates":false},"installation_guide":"https://www.attriboo.com/docs/installation","next":"Install once using the matching platform guide. Publish the change, respect the site's consent setup, then check received activity. The snippet contains no private API key."}
```

### Output fields

- site: Website ID.
- domain: Website domain.
- format: Selected format.
- script: Complete snippet to install once.
- preferences: Saved mode, consent, captureEmails and visitorEstimates.
- installation_guide: Matching documentation entry point.
- next: Next installation step.

[Full output field definitions](https://www.attriboo.com/developers/tracking-script)

Without --json or --csv, this command prints only the script string. --json returns the full site, domain, format, script, preferences, installation_guide and next fields.

Install the exact snippet once using the matching platform guide. This command does not edit or deploy your website.

## attriboo sites verify

Inspect tracking activity timestamps and collection pause state.

Access: OAuth analytics:read sites:write; workspace owner/admin

### Options

- --site (required): Website ID or domain from sites list.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Check a website after installation

```bash
attriboo sites verify --site shop.example.com
```

The example returns waiting and exits with code 2. It is not a completed tracking check.

Illustrative output:

```text
{
  "site": "site_example",
  "domain": "shop.example.com",
  "collection_paused": false,
  "tracking_seen": false,
  "verified_at": null,
  "last_event_at": null,
  "status": "waiting",
  "checked_at": "2026-10-08T12:00:00.000Z",
  "meaning": "This checks records received by Attriboo. It does not inspect your published code, prove a deployment, or verify a payment connection."
}
```

### Output fields

- site: Website ID.
- domain: Website domain.
- collection_paused: Whether collection is paused.
- tracking_seen: Whether script_verified_at has been set.
- verified_at: Verification timestamp, or null.
- last_event_at: Latest received event timestamp, or null.
- status: paused, activity_received or waiting. Values: paused, activity_received, waiting.
- checked_at: Time this check ran.
- meaning: Explanation of verification limits.

[Full output field definitions](https://www.attriboo.com/developers/verify-installation)

waiting or paused returns exit code 2. activity_received returns 0. Other failures return 1.

This checks records received by Attriboo. It does not inspect deployed source, prove a new visit or verify a payment connection. Check timestamps before treating old activity as evidence of a new installation.

## attriboo reports overview

Read headline revenue, traffic, conversion and advertising metrics with comparison changes.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read overview

```bash
attriboo reports overview --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"metrics":{"visitors":100,"sessions":120,"pageviews":240,"revenue":20000,"orders":4,"buyers":4,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"avg_session_seconds":60,"bounce_rate":40,"live_visitors":0,"ad_spend":5000,"net_profit":15000,"roas":4,"ai_revenue":5000},"changes_pct":{"revenue":null,"visitors":null,"orders":null,"conversion_rate":null,"revenue_per_visitor":null,"avg_session":null,"bounce_rate":null},"notes":"Money is in integer cents. changes_pct is the percent change versus the comparison period (null when that period has no data)."}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- metrics: Headline metrics. Revenue, revenue_per_visitor, average_order_value, ad_spend, net_profit and ai_revenue are cents; roas is a ratio or null without spend.
- changes_pct: Percent changes for revenue, visitors, orders, conversion_rate, revenue_per_visitor, avg_session and bounce_rate. Null when no comparison is available.
- notes: Calculation and completeness notes.

[Full output field definitions](https://www.attriboo.com/developers/overview)

net_profit is recorded revenue less ad spend; it is not accounting profit after every business expense.

Report history covers available records in the last 365 days; collection allowances and reporting capacity are separate.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports timeseries

Read traffic and revenue over daily, weekly, monthly or quarterly buckets.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --granularity: Requested bucket size. Values: daily, weekly, monthly, quarterly. Default: daily.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read time series

```bash
attriboo reports timeseries --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"granularity":"daily","points":[{"label":"Oct 1","visitors":100,"revenue":20000,"orders":4,"top_source":"Google Organic","comparison_visitors":null,"comparison_revenue":null}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- granularity: Requested bucket granularity; long ranges may be grouped more coarsely.
- points: Report records. See the fields below.
  - label: Bucket label.
  - from: Optional database bucket inclusive UTC start.
  - to: Optional database bucket exclusive UTC end.
  - gross_sales: Optional gross sales cents for database-backed results.
  - refunds: Optional refund cents for database-backed results.
  - visitors: Visitors in the bucket.
  - revenue: Revenue in cents.
  - orders: Order count.
  - top_source: Leading source or null.
  - comparison_visitors: Comparison visitors or null.
  - comparison_revenue: Comparison revenue in cents or null.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/timeseries)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Long daily ranges can be grouped weekly, and long weekly ranges monthly. Inspect returned points rather than assuming one point per day.

Larger-site results may also include from, to, gross_sales and refunds per point and a coverage object.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports sources

Compare recorded marketing sources and their attributed revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read sources

```bash
attriboo reports sources --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"sources","rows":[{"source":"Google Organic","channel":"Organic Search","visitors":100,"conversions":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200}]}
```

### Save the returned source rows as CSV

```bash
attriboo reports sources --site shop.example.com --period 30d --csv > sources.csv
```

This is the example content saved in sources.csv; stdout is redirected into the file. CSV exports do not automatically fetch continuation pages.

Illustrative output:

```text
"source","channel","visitors","conversions","revenue","conversion_rate","revenue_per_visitor"
"Google Organic","Organic Search","100","4","20000","4","200"
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - source: Source name.
  - channel: Channel group.
  - visitors: Visitors.
  - conversions: Attributed conversion credit; can be fractional.
  - revenue: Attributed revenue in cents.
  - conversion_rate: Percentage.
  - revenue_per_visitor: Cents per visitor.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/sources)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

The selected attribution model changes conversion credit and revenue. Linear credit can split a sale across sources.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports channels

Compare channel groups such as Organic Search, Paid Ads and AI Referral.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read channels

```bash
attriboo reports channels --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"channels","rows":[{"channel":"Organic Search","visitors":100,"revenue":20000,"share_of_revenue_pct":100}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - channel: Channel group.
  - visitors: Visitors.
  - revenue: Revenue in cents.
  - share_of_revenue_pct: Percentage of revenue.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/channels)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports campaigns

Read campaign revenue, recorded costs and return on ad spend.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read campaigns

```bash
attriboo reports campaigns --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"campaigns","rows":[{"campaign":"autumn","source":"google","visitors":100,"conversions":4,"revenue":20000,"ad_spend":5000,"roas":4,"cost_per_acquisition":1250,"net_profit":15000}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - campaign: utm_campaign label.
  - source: utm_source label.
  - visitors: Visitors.
  - conversions: Attributed conversion credit.
  - revenue: Attributed revenue in cents.
  - ad_spend: Recorded spend in cents.
  - roas: Revenue divided by spend; null without spend.
  - cost_per_acquisition: Cents per conversion; null without spend or conversions.
  - net_profit: Revenue less ad spend, in cents.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/campaigns)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

A missing cost connection is not evidence that a campaign is free. No currency conversion is performed.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports pages

Read landing-page visits, AI referrals, crawler activity and revenue credit.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read landing pages

```bash
attriboo reports pages --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"pages","rows":[{"path":"/pricing","landing_visits":100,"ai_referral_visits":10,"ai_bot_crawls":20,"conversions":4,"revenue":20000}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - path: Landing path; a non-main subdomain can be prefixed.
  - landing_visits: Landing visits.
  - ai_referral_visits: Human AI referral visits.
  - ai_bot_crawls: Crawler requests, not visits or citations.
  - conversions: Attributed conversion credit.
  - revenue: Attributed revenue in cents.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/pages)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports hostnames

Group visitors by the hostname where they first arrived.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read hostnames

```bash
attriboo reports hostnames --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"hostnames","rows":[{"hostname":"shop.example.com","visitors":100,"conversion_rate":4,"revenue":20000,"revenue_per_visitor":200,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - hostname: Entry hostname with www removed.
  - visitors: Visitors.
  - conversion_rate: Percentage.
  - revenue: Revenue in cents.
  - revenue_per_visitor: Cents per visitor.
  - top_source: Leading source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/hostnames)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports countries

Read countries audience counts, conversion and revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read countries

```bash
attriboo reports countries --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"countries","rows":[{"name":"United States","country_code":"US","visitors":100,"buyers":4,"orders":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"share_of_visitors_pct":100,"share_of_revenue_pct":100,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - name: Audience label.
  - country_code: ISO country code; can be null for an unknown city country.
  - visitors: Count.
  - buyers: Count.
  - orders: Count.
  - revenue: Integer cents.
  - conversion_rate: Percentage, 0–100.
  - revenue_per_visitor: Integer cents.
  - average_order_value: Integer cents.
  - share_of_visitors_pct: Percentage, 0–100.
  - share_of_revenue_pct: Percentage, 0–100.
  - top_source: Leading recorded source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/countries)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports cities

Read cities audience counts, conversion and revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read cities

```bash
attriboo reports cities --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"cities","rows":[{"name":"New York","country_code":"US","visitors":100,"buyers":4,"orders":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"share_of_visitors_pct":100,"share_of_revenue_pct":100,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - name: Audience label.
  - country_code: ISO country code; can be null for an unknown city country.
  - visitors: Count.
  - buyers: Count.
  - orders: Count.
  - revenue: Integer cents.
  - conversion_rate: Percentage, 0–100.
  - revenue_per_visitor: Integer cents.
  - average_order_value: Integer cents.
  - share_of_visitors_pct: Percentage, 0–100.
  - share_of_revenue_pct: Percentage, 0–100.
  - top_source: Leading recorded source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/cities)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports devices

Read devices audience counts, conversion and revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read devices

```bash
attriboo reports devices --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"devices","rows":[{"name":"Desktop","visitors":100,"buyers":4,"orders":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"share_of_visitors_pct":100,"share_of_revenue_pct":100,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - name: Audience label.
  - visitors: Count.
  - buyers: Count.
  - orders: Count.
  - revenue: Integer cents.
  - conversion_rate: Percentage, 0–100.
  - revenue_per_visitor: Integer cents.
  - average_order_value: Integer cents.
  - share_of_visitors_pct: Percentage, 0–100.
  - share_of_revenue_pct: Percentage, 0–100.
  - top_source: Leading recorded source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/devices)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports browsers

Read browsers audience counts, conversion and revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read browsers

```bash
attriboo reports browsers --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"browsers","rows":[{"name":"Chrome","visitors":100,"buyers":4,"orders":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"share_of_visitors_pct":100,"share_of_revenue_pct":100,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - name: Audience label.
  - visitors: Count.
  - buyers: Count.
  - orders: Count.
  - revenue: Integer cents.
  - conversion_rate: Percentage, 0–100.
  - revenue_per_visitor: Integer cents.
  - average_order_value: Integer cents.
  - share_of_visitors_pct: Percentage, 0–100.
  - share_of_revenue_pct: Percentage, 0–100.
  - top_source: Leading recorded source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/browsers)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports os

Read operating systems audience counts, conversion and revenue.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read operating systems

```bash
attriboo reports os --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"os","rows":[{"name":"Windows","visitors":100,"buyers":4,"orders":4,"revenue":20000,"conversion_rate":4,"revenue_per_visitor":200,"average_order_value":5000,"share_of_visitors_pct":100,"share_of_revenue_pct":100,"top_source":"Google Organic"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - name: Audience label.
  - visitors: Count.
  - buyers: Count.
  - orders: Count.
  - revenue: Integer cents.
  - conversion_rate: Percentage, 0–100.
  - revenue_per_visitor: Integer cents.
  - average_order_value: Integer cents.
  - share_of_visitors_pct: Percentage, 0–100.
  - share_of_revenue_pct: Percentage, 0–100.
  - top_source: Leading recorded source.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/os)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports goals

Read goal completion counts and the revenue of visitors who completed each goal.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read goals

```bash
attriboo reports goals --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"report":"goals","rows":[{"goal":"Started trial","completions":20,"visitors":15,"revenue_from_completers":20000,"completer_conversion_rate":26.7,"share_of_buyers_pct":100}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- rows: Report records. See the fields below.
  - goal: Goal name.
  - completions: Number of completions.
  - visitors: Distinct completers.
  - revenue_from_completers: Completers' revenue in cents.
  - completer_conversion_rate: Completers who became buyers, percent.
  - share_of_buyers_pct: Percentage of buyers who completed the goal.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/goals)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Revenue from completers is an association, not proof the goal caused a purchase. A buyer can complete several goals.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports realtime

Read visitors active in the last five minutes.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain from sites list.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read live visitors

```bash
attriboo reports realtime --site shop.example.com --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"window_minutes":5,"live_visitors":1,"visitors":[{"visitor_id":"v_example","country_code":"US","city":"New York","source":"Google Organic","page":"/pricing","device":"Desktop","seconds_ago":12}]}
```

### Output fields

- site: Website ID, domain and currency.
- window_minutes: Fixed five-minute live window.
- live_visitors: Total live visitors, including later pages.
- visitors: Report records. See the fields below.
  - visitor_id: Observed visitor ID.
  - country_code: Country or null.
  - city: City or null.
  - source: Recorded source.
  - page: Latest path.
  - device: Device type.
  - seconds_ago: Seconds since last activity.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/realtime)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

This is a fixed five-minute live window. period=realtime on other reports instead selects the last 30 minutes.

Continuation pages retain the original live window. Reload the first page for a fresh current window.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports sales

Read recorded payments and refunds, newest first, with observed attribution details.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read sales

```bash
attriboo reports sales --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"sales":[{"id":"tx_example","provider":"stripe","external_id":"order_123","type":"one_time","amount":5000,"currency":"USD","customer_email":null,"transacted_at":"2026-10-01T12:00:00Z","attributed":true,"first_touch":"Google Organic","last_touch":"Direct","touches":2,"self_reported_source":null}]}
```

### Continue a returned sales page

```bash
attriboo reports sales --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --limit 50 --cursor NEXT_CURSOR --json
```

Replace NEXT_CURSOR with a value returned by the previous request; do not construct one.

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"sales":[{"id":"tx_example","provider":"stripe","external_id":"order_123","type":"one_time","amount":5000,"currency":"USD","customer_email":null,"transacted_at":"2026-10-01T12:00:00Z","attributed":true,"first_touch":"Google Organic","last_touch":"Direct","touches":2,"self_reported_source":null}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- sales: Report records. See the fields below.
  - id: Stored transaction ID.
  - provider: Payment provider.
  - external_id: Provider transaction ID.
  - type: one_time, subscription_new, subscription_renewal or refund.
  - amount: Signed integer cents; refunds are negative.
  - currency: Transaction currency.
  - customer_email: Customer email or null. Treat as private data.
  - transacted_at: UTC transaction time.
  - attributed: Whether a preceding observed source was linked.
  - first_touch: First source or null.
  - last_touch: Last source or null.
  - touches: Preceding observed touches.
  - self_reported_source: Survey answer or null.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/sales)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

An unattributed payment is still a payment. Importing history does not recreate unobserved visits.

Keep customer_email and visitor identifiers in authorized private systems.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports funnels

Read independent standard stages, list saved definitions, or inspect an ordered saved funnel.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --cursor: A returned next_cursor. Keep the same website, report, dates, model, visitor filters and funnel selection.
- --funnel: Omit for standard stages; saved lists definitions; a saved funnel UUID reads its exact ordered results.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read funnels

```bash
attriboo reports funnels --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"funnels":[{"name":"All traffic","visitors":100,"buyers":4,"revenue":20000,"conversion_rate":4,"steps":[{"step":"Visited the site","visitors":100,"pct_of_entry":100,"drop_off_pct":0},{"step":"Viewed 2+ pages","visitors":60,"pct_of_entry":60,"drop_off_pct":40},{"step":"Completed a goal","visitors":15,"pct_of_entry":15,"drop_off_pct":75},{"step":"Purchased","visitors":4,"pct_of_entry":4,"drop_off_pct":73.3}]}]}
```

### List saved definitions

```bash
attriboo reports funnels --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --funnel saved --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"kind":"saved_definitions","funnels":[],"next_cursor":null,"coverage":{"complete":true,"total_rows":0,"returned_rows":0}}
```

### Read an ordered saved funnel

```bash
attriboo reports funnels --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --funnel YOUR_SAVED_FUNNEL_UUID --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"kind":"saved","period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"definition":{"id":"11111111-1111-4111-8111-111111111111","name":"Checkout","steps":[{"kind":"page","match":"equals","value":"/pricing"},{"kind":"purchase"}]},"rows":[{"label":"Visited /pricing","visitors":100,"pctOfFirst":100,"pctOfPrevious":100,"revCents":20000,"topSource":"Google Organic"},{"label":"Purchased","visitors":4,"pctOfFirst":4,"pctOfPrevious":4,"revCents":20000,"topSource":"Google Organic"}],"coverage":{"complete":true,"total_rows":2,"returned_rows":2}}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- steps_definition: Standard stage labels, when no saved funnel is selected.
- kind: saved_definitions or saved for a selected saved-funnel request.
- definition: Exact saved funnel definition when funnel=ID.
- rows: Ordered saved-funnel results when funnel=ID; label, visitors, pctOfFirst, pctOfPrevious, revCents and topSource.
- funnels: Standard cohorts, or saved definitions when funnel=saved. For funnel=ID use definition and rows instead.
  - name: Cohort name.
  - visitors: Entry cohort visitors.
  - buyers: Buyers in the cohort.
  - revenue: Cohort revenue in cents.
  - conversion_rate: Buyer percentage.
  - steps: Independent stage counts, with step, visitors, pct_of_entry and drop_off_pct.
- next_cursor: When provided, pass this value to continue; null means the last page. Some small-site reports omit this field.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/funnels)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Standard stages independently count entry-cohort members; they do not require the stages to happen in order.

funnel=saved returns kind: saved_definitions, funnels, next_cursor and coverage. Each definition includes id, name and steps.

funnel=ID returns kind: saved, period, definition, rows and coverage. Each ordered row has label, visitors, pctOfFirst, pctOfPrevious, revCents and topSource. Saved funnels have two to eight steps; a selected funnel has no cursor.

Definitions are read-only through the public API. Create and edit them in the dashboard.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports ai-search

Keep crawler activity, referred human visitors and revenue credit separate for each AI engine.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read ai search

```bash
attriboo reports ai-search --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"engines":[{"engine":"ChatGPT","bot_crawls":20,"visitors":10,"attributed_buyers":1,"attributed_revenue":5000,"conversion_rate":10,"revenue_per_visitor":500,"top_page":"/pricing"}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- engines: Report records. See the fields below.
  - engine: ChatGPT, Perplexity, Claude, Gemini or Copilot.
  - bot_crawls: Crawler requests.
  - visitors: Referred human visitors.
  - attributed_buyers: Attributed conversion credit; can be fractional.
  - attributed_revenue: Attributed revenue in cents.
  - conversion_rate: Attributed buyers divided by visitors, percent.
  - revenue_per_visitor: Cents per referred visitor.
  - top_page: Leading page or null.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/ai-search)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Examples show one engine for brevity. Actual reports include the supported engines.

Crawls do not prove citations or visits. Never call crawls divided by visitors a conversion rate.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.

## attriboo reports time-to-purchase

Group purchases by time since a preceding recorded entry visit.

Access: OAuth analytics:read or workspace key

### Options

- --site: Website ID or domain. Required when the workspace has more than one website.
- --period: UTC date selection. from and to override period. Values: realtime, today, yesterday, 7d, 30d, 90d, 12m, wtd, mtd, qtd, ytd, all. Default: 30d.
- --from: Inclusive start date. Supply to as well.
- --to: Inclusive end date. Supply from as well.
- --compare: Comparison range. Values: previous_period, mom, qoq, yoy, none. Default: previous_period.
- --model: How recorded sources share revenue credit. Values: first_touch, last_touch, linear, time_decay. Default: first_touch.
- --filters: JSON array string of up to twenty visitor filters, for example [{"dim":"country","op":"is","value":"US"}]. Dimensions: source, channel, campaign, entry_page, page, hostname, country, device, browser, os, goal. Operators: is, is_not. Values are exact strings up to 500 characters. All filters must match the visitor across available history; report dates then select activity for that cohort. Unmatched payments are excluded. Crawler counts remain website-wide; spend requires every filter to be source/channel/campaign. Preserve filters when paging.
- --limit: Maximum rows where supported. Default: 50.
- --json: Compact JSON instead of formatted JSON.
- --csv: CSV for the main row collection; nested values remain JSON cells. Cannot be combined with --json.

### Read time to purchase

```bash
attriboo reports time-to-purchase --site shop.example.com --from 2026-10-01 --to 2026-10-07 --compare none --json
```

Illustrative output:

```text
{"site":{"id":"site_example","domain":"shop.example.com","currency":"USD"},"period":{"from":"2026-10-01T00:00:00.000Z","to":"2026-10-08T00:00:00.000Z","label":"Custom","compare":"none","attribution_model":"first_touch"},"buckets":[{"label":"Same day","orders":4,"revenue":20000,"share_pct":100,"avg_touches":2}]}
```

### Output fields

- site: Website ID, domain and currency.
- period: Resolved UTC boundaries; to is the exclusive timestamp after the selected end date.
- buckets: Report records. See the fields below.
  - label: Same day, 1–3, 4–7, 8–30 or 30+ days.
  - orders: Order count.
  - revenue: Revenue in cents.
  - share_pct: Percentage of included orders.
  - avg_touches: Average observed touches.
- coverage: When provided, describes completeness, snapshot time and row coverage. Row limits apply to this page, not to headline totals.

[Full output field definitions](https://www.attriboo.com/developers/time-to-purchase)

Money is integer cents in site.currency. Percentages use a 0–100 scale.

Examples show one bucket for brevity. Refunds and payments without a preceding recorded entry visit are excluded.

CLI JSON output is the API data object directly, without the REST status/data envelope. Default output is formatted JSON; --json is compact JSON.

CSV contains only the returned page's main row collection. Continue using returned next_cursor values rather than assuming a single CSV is a complete export.
