Skip to content

docs(export): add a Data Export page with sample CSVs - #199

Open
ChetanBhosale wants to merge 2 commits into
mainfrom
chetan/docs-data-export-page
Open

docs(export): add a Data Export page with sample CSVs#199
ChetanBhosale wants to merge 2 commits into
mainfrom
chetan/docs-data-export-page

Conversation

@ChetanBhosale

Copy link
Copy Markdown
Contributor

Data Export now offers two attribution views, four datasets and two scopes, and nothing explained what each one contains or how to read it. This adds one page under Analytics, with four downloadable sample files.

Requested by @DarshilRathod.

What the page covers

Both flows, with screenshots. Settings then Data Export then Export Data for a whole project, and the campaign drawer for a single campaign. The page states plainly that the drawer offers only the two user lists, since Overall Data is project level.

Which dataset to pick. Campaign to reconcile against the dashboard, Ad Set and Creative to see which ad set did the work.

A callout that is easy to miss: the campaign drawer has no view picker. It follows whichever view the Campaigns page is already on, so switching that page to Re-engagement changes what a campaign export contains.

Reading the numbers correctly

The section most likely to save support time. Everything here looks like a bug and is not:

Thing people report Why
Ad Set and Creative totals are lower than the dashboard Google PMax and Meta Advantage+ report at campaign level, so that spend has no ad set to sit under. The gap between the two files is the unattributable amount.
Sign Ups shows a number on one row and 0 on the rest Counted once across the whole range, so the total sits on the campaign's first row.
Columns marked "per-day, not summable" Adding the days double counts anyone appearing on more than one day.
Rows of zeros Real. The campaign was live and had no activity. Fully blank rows are removed.
Meta and Google iOS stop at campaign level SKAdNetwork gives no ad set breakdown.
Apple Search Ads shows keywords, not creatives An ad group is described by its keywords.
GAID or IDFA empty GAID is Android only. IDFA needs tracking consent, so it is empty for most iOS users.
Project level user export says "Latest Campaign" Each user appears once. Grouping that file by campaign will not match the dashboard.

Sample files

samples/export-csv/, linked from the page as download cards.

The two Overall Data samples are built from real exports with campaign names, ids and links replaced. I grepped the output to confirm no real campaign name or id survived.

The two user samples are generated rather than anonymised. Those columns carry user ids, emails, phone numbers, IPs and advertising ids, and scrubbed real rows do not belong on a public site. Columns and order match a real export either way, and the page says the values are made up.

Verified

Route checker passes: 92 pages, no unredirected removals. docs.json is valid JSON. On a local preview every route returns 200, including all four CSVs and both screenshots, so the new samples/ directory is served like images/.

Note

Local preview needs #198 to start at all. That is a separate toolchain fix and this branch does not touch the lockfile, so the two can merge in either order.

🤖 Generated with Claude Code

ChetanBhosale and others added 2 commits August 26, 2026 02:36
Data Export now offers two attribution views, four datasets and two scopes, and
nothing explained what each one contains or how to read it. This adds a single
page under Analytics covering both flows, with the four sample files a reader can
download before running their own export.

The section that should save the most support time is "Reading the numbers
correctly". It covers the things that look like bugs and are not:

- Ad Set and Creative totals come out lower than the dashboard, because Google
  PMax and Meta Advantage+ report at campaign level and that spend has no ad set
  to sit under. The gap between the two files is the unattributable amount.
- Sign Ups counts each user once across the whole range, so the total sits on the
  campaign's first row and later rows show 0.
- Columns marked "per-day, not summable" double count if added up.
- Rows of zeros are real and mean no activity that day.
- Meta and Google iOS campaigns stop at campaign level because SKAN gives no ad
  set breakdown, and Apple Search Ads shows keywords in place of creatives.
- GAID is Android only, and IDFA is empty for most iOS users because it needs
  tracking consent.
- Project level user exports say "Latest Campaign", because each user appears
  once. Grouping that file by campaign will not match the dashboard.

Also documented: the campaign drawer has no view picker and follows whichever
view the Campaigns page is on, so switching to Re-engagement there changes what a
campaign export contains.

The two Overall Data samples come from real exports with campaign names, ids and
links replaced. The two user samples are generated rather than anonymised, since
those columns carry user ids, emails, phone numbers, IPs and advertising ids. The
columns and their order match a real export in both cases, and the page says the
values are made up.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The page said the export arrives as a download link. It does not: the CSV is an
attachment on the email, zipped above 10 MB.

That matters because it comes with a failure mode worth documenting. Email caps
attachments at 25 MB measured after zipping, so a wide range on a busy project
fails to deliver and the export is marked failed. Added as a warning and an FAQ
entry, since "narrow the date range" is the fix and nothing said so.

Also adds two things a reader had no way to find:

- Limits: 3 months per export, 5 exports per user every 5 minutes, 25 MB
  attachment. The export limit is per user rather than per project, so exporting
  several projects in a row shares one budget.
- Currency: revenue and spend are converted to the project's display currency,
  spend per campaign because ad accounts bill in their own, and ROAS is
  recalculated from the converted values rather than carried over.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant