# Moving from the legacy mobile export

For customers who integrated the mobile export before October 2026. The current mobile export is requested with `"version": "v2"` on [Create an export](/docs/api-reference#create-export). The legacy export (`v1`) ended on 11 November 2026: its days up to then stay available, and a request for a later day is a 400 `V1_NOT_AVAILABLE_AFTER`. A job that sends no `version` keeps getting the legacy export until you switch. Desktop is unchanged. [Versions →](/docs/api-reference#versions)

## What changes

| Column | Change | What to do |
|---|---|---|
| `demographics.date_of_birth` | **Removed** | Use `age` in [`demographics`](/docs/data-dictionary#demographics). The current export carries no date of birth. |
| `evidence_metadata` | Removed | Use [`brand`](/docs/data-dictionary#brand), `brand_evidence` and `ad_text`. |
| `brand` | New | The advertiser by its public name. |
| `brand_evidence` | New | The exact text the brand was read from. |
| `other_brands` | New | Other brands named in the ad, `[]` when there are none. |
| `industry` | New | Top level of the IAB Ad Product Taxonomy 2.0. |
| `industry_path` | New | The full IAB category. |
| `ad_text` | New | The advertiser's own words in the ad. |
| `creative_url` | New | Link to the ad's image or video file. |
| `app_name` | New | The app by the name it shows on the phone. |
| `ad_format` | New | Where in the app the ad ran: feed, reel, story, in-stream and so on. |
| `media` | New | `video` or `display`. |
| `size_group` | New | The ad's shape by height ÷ width, from `banner` to `full`. |
| `display_size` | New | The standard display size a browser ad matches, for example `300x250`. |

Every other column keeps its name and type.

## What the rows now mean

[`last_seen`](/docs/data-dictionary#last_seen) is when the ad left the screen: the device's next screen change after the ad was last captured, in the same app or another, at most 60 seconds later and 10 minutes after `first_seen`, and earlier when the camera stopped. In the legacy export it was the last capture of the ad. `duration_s`, `eyetracker_enabled`, `fixation_duration_ms` and `is_fixated` cover `first_seen` to `last_seen`, so the same impression shows longer time on screen and more fixation than in the legacy export. Compare within one export, not across the two.

`impression_id` values do not pair between the two exports, and a rebuilt day can give its rows new ids. Merge by day, not by id.

## How to switch

1. **Add `"version": "v2"`** to the create call. Same key, same endpoints, same files.
2. **Update your reader.** Drop `date_of_birth` and `evidence_metadata`; add the twelve columns.
3. **Move to the change feed.** A first pull, then a daily pull of what changed, upserted on `impression_id`: [the change feed](/docs/integration). Staying on the day export, replace whole days instead, as in [Day export](/docs/integration?method=day).
4. **Fetch from 13 March 2026.** v2 data starts on 13 March 2026 in Sweden and Denmark, 26 March in Norway and 19 May in Finland; a `from_date` before 13 March is a 400 `V2_FROM_DATE_NOT_AVAILABLE` with the first day in `available_from`.
5. **Tell us** at data@attexdata.ai when you have switched.
