Documented by Meta. The steps and rules on this page come from Meta’s own documentation.
How do I measure in-store sales from Meta ads?
Meta's developer page names the Conversions API as its recommended way to send offline and physical store events. You create a dataset, send each sale as an event with action source physical_store, and upload daily if you can. Meta's help pages also describe a manual CSV upload in Events Manager.
Sending store sales fits when customers buy in a physical shop and your system can attach customer details, such as a hashed email or phone number, to each sale. It fits poorly when your sales carry no such details. This page reports what Meta’s developer and help pages say, as checked on 2 Oct 2026, including where those pages differ.
Which method does Meta recommend now?
Meta’s developer page says the Conversions API is its recommended method for sending offline and physical store events. It lists the Offline Conversions API as Meta’s legacy API for offline events. Meta’s help pages, which show no page date, say the Offline Conversions API “will be discontinued in May 2025”, and that you should convert to a Conversions API integration. The Graph API v20.0 changelog, released 21 May 2024, gives the same date. The v17.0 changelog, released 23 May 2023, had said the API would stop supporting offline events and expected it to end in the third quarter of 2024. The help page for the API also says that if you already set it up, you can continue to use it unless you want datasets that connect website or app data with offline data. None of these pages says whether the old API is still switched on, so check Events Manager before you build on it.
What do you set up first?
Offline events must belong to a dataset, and the dataset must be associated with an ad account before your campaign starts. The developer page shows a call to check whether a dataset is consolidated and so eligible for offline events through the Conversions API.
On API versions, the page writes the endpoint as {API_VERSION} and {DATASET_ID} followed by /events, with no single version named. Its sample upload uses v15.0 and the dataset check uses v16.0. Choose the version your integration targets and test it.
What does each offline event need?
| Field | What the page says |
|---|---|
| action_source | physical_store, for all offline and store events |
| event_name | Required, such as Purchase |
| event_time | Required, Unix timestamp |
| currency and value | Required for Purchase |
| Customer details | Hashed email, phone and similar fields; external_id highly recommended |
| order_id | Optional, a unique ID for each transaction |
| store_data | Optional store location data |
Meta’s list of customer details also includes the lead ID from lead ads. Check that your till or order system stores at least one of these details.
How do you send them, and how late can they be?
You post events to the dataset’s events path. Meta recommends uploading in real time or daily so sales can be matched with your ad performance. Meta’s help page adds that data is matched against tracked impressions in the last 90 days, for events within 1, 7 or 28 days of an impression.
The developer page gives two timing rules. The event_time can be up to 7 days before you send, and one older event makes the whole request fail. It also says physical_store transactions should be uploaded within 62 days of the conversion. It does not reconcile the two, so upload daily and test with the Test Events tool.
How does deduplication work for offline events?
Meta says offline events are deduplicated only against other offline events, not against pixel or web Conversions API events. The default method uses order_id. Without it, Meta uses a user-based method. The maximum window is 7 days. Meta’s help page says to send only one event per order, with precise timestamps. The developer page also lists item_number for telling events apart within one order. Give every sale a unique order ID.
What if you cannot build an integration?
Meta’s help pages name two fallbacks: a partner integration, though not every partner supports offline events, and a manual CSV upload in Events Manager. The upload shows an estimated match rate before you start. Once uploaded, data cannot be deleted or updated, and results can take up to 15 minutes to show. Check the file before you start the upload.
What can you do with the results?
Meta says offline events help you track offline activity attributed to your ads, measure offline return on ad spend, and reach people based on offline actions. Store sales optimization is no longer available, as of 15 July 2022, so do not plan around it.
FAQ
Is the Offline Conversions API still available?
Meta’s help pages say it will be discontinued in May 2025, and the v20.0 changelog of 21 May 2024 repeats that date. The developer page calls it the legacy API and recommends the Conversions API. None of these pages says whether your account still has it, so look in Events Manager before you plan around it.
Can offline events be deduplicated against website events?
No. Meta’s developer page says offline events are deduplicated only against other offline events. Because they are not checked against pixel or web events, give each sale a unique order ID and send it once.
How soon do uploaded sales appear?
Meta’s developer page says Conversions API data is processed in real time, so you can usually view results as soon as you add it. For a manual CSV upload, the help page says it can take up to 15 minutes, depending on file size.
Sources
- Sending Offline Events Using the Conversions API (Meta, checked 2 Oct 2026)
- About the Offline Conversions API (Meta, checked 2 Oct 2026)
- Changes to the way you manage offline events in Meta Events Manager and Meta Business Suite (Meta, checked 2 Oct 2026)
- About offline conversions (Meta, checked 2 Oct 2026)
- Best practices for offline events data (Meta, checked 2 Oct 2026)
- Upload offline event data (Meta, checked 2 Oct 2026)
- Store sales optimization (Meta, checked 2 Oct 2026)
- Graph API changelog, version 20.0 (Meta, checked 2 Oct 2026)
- Graph API changelog, version 17.0 (Meta, checked 2 Oct 2026)
Drafted with AI and checked claim by claim against the pages linked under Sources. Found a mistake? Tell us via the corrections policy.