Offline Conversions Upload for Facebook: Closing the Revenue Loop

11 min read

Offline Conversions Upload for Facebook: Closing the Revenue Loop The digital attribution story stops the moment a user leaves your website. For businesses with brick-and-mortar stores, call centers, subscription models, or long B2B sales cycles, that means the vast majority of profitable conversions happen in a data black hole.

SS

Simul Sarker

Founder & Product Designer of DataCops

Last Updated

May 29, 2026

There is no "offline conversions upload" anymore. Meta killed it in May 2025.

The separate Offline Conversions API, the dedicated endpoint, the offline event sets, the CSV upload workflow every guide still describes, all gone. Graph API v17.0 removed support. Meta deprecated the system in May 2025 with no extension. Some advertisers who migrated reported drops of up to 70% in accepted events because nobody told them the migration had changed the data model entirely.

What replaced it: the standard Conversions API with the action_source parameter set to "physical_store" for in-store events or "system_generated" for CRM and backend events. That is it. There is no longer a separate offline tracking infrastructure. Your in-store purchases, your phone orders, your CRM-closed deals, your delayed B2B revenue: all of it now flows through the same CAPI endpoint as your online conversions.

The guides have not caught up. Every offline conversion article on the SERP still describes the old CSV upload workflow to a deprecated endpoint. That includes the existing version of this article on the DataCops site. The mechanics changed. The data quality problem did not.

Here is what that means. Your CRM data now goes to Meta through the same high-fidelity pipe as your online conversions. If your CRM contains fraudulent leads, fake trials, bot-generated signups, or unqualified contacts that were never going to buy, they flow to Andromeda through CAPI with the same event enrichment and EMQ scoring as your real buyers. There is no separate offline dataset to isolate the contamination. One pipe. Everything in it.

Project Andromeda, fully deployed October 2025, acts on those signals within hours. Feed it a CRM full of junk alongside your real buyers and it builds a targeting model from the mixture. It finds more traffic that looks like both. The revenue loop the offline conversion guide promises closes on real buyers and fake ones simultaneously.


Quick answers

How do I upload offline conversions to Facebook Ads Manager in 2026?

The old CSV upload to an offline event set is gone. Meta deprecated it in May 2025. Now: send offline events through the standard Conversions API with action_source set to "physical_store" for in-store events or "system_generated" for CRM and backend events. The endpoint is the same CAPI endpoint as your online conversions. The data model is the same. The deduplication logic is the same.

What is a good match rate for Facebook offline conversions?

Anything below 50% is a problem worth stopping for. Strong feeds with clean hashed email and phone hit 70-90%. Match rate is a data hygiene score in disguise. Low match usually means missing identifier fields, formatting errors (unnormalized phone numbers, inconsistent email casing), or records too old to match. But match rate tells you how well Meta can identify the person. It does not tell you whether that person was a real buyer or a fraudulent lead.

How long does it take for offline conversions to appear in Meta Events Manager?

Usually within an hour for the event to register. Attribution and reporting settle over the next day. If events show nothing after several hours, the format is wrong or the event_time is outside the 7-day acceptance window. Meta's CAPI accepts events up to 7 days old. Events older than that are rejected. Use accurate per-event timestamps, not upload timestamps.

Can I upload offline conversions from HubSpot or Salesforce to Facebook?

Yes. HubSpot has a native CAPI integration that syncs lifecycle stage changes and form submissions. Salesforce connects via direct API integration or partner connectors. The fbclid value from the original ad click needs to be captured in the CRM at initial form submission and included in the CAPI event when the deal closes. Without fbclid, Meta cannot attribute the CRM conversion to the original ad click.

What data fields are required?

event_name (Purchase, Lead, CompleteRegistration), event_time as Unix timestamp, action_source set to physical_store or system_generated, and at least one customer identifier. Practically: send hashed email, phone, first name, last name, city, state, zip. Every identifier improves match rate. Every identifier gets SHA-256 hashed before leaving your system.

What is the 90-day lookback window?

Meta attributes an offline conversion to an ad if the ad exposure happened within the lookback window before the conversion timestamp. Up to 90 days for some configurations. Use the actual conversion timestamp, not the upload date. Stamp events with upload date and you destroy attribution.

Why are my offline conversion match rates low?

Usually: missing identifier fields, formatting errors, records outside the match window. Less commonly checked: the contacts in your CRM were never real people. If your lead gen funnel has bot contamination, the hashed emails and phones in your CRM do not match real Facebook profiles. Low match rate from contaminated leads is a data quality problem dressed as a technical problem.

How do offline conversions improve Facebook ad optimization?

They close the revenue loop. Meta sees which ad-exposed users became actual revenue and adjusts spend toward people who resemble them. That is the value. It is also exactly why bad CRM data damages targeting. The loop optimizes toward whatever you feed it. Garbage CRM data closes the loop on garbage.


What actually changed in May 2025 and why it matters

Before May 2025: separate systems. Online conversions went through CAPI with action_source as "website." Offline conversions went through the Offline Conversions API to a separate offline event set. Different endpoints. Different datasets. Different reporting. Some natural isolation between online and offline signal.

After May 2025: one system. Everything through CAPI. Online and offline events unified in one dataset. Meta deprecated the separate offline infrastructure entirely.

The consolidation has genuine benefits. Unified deduplication. Simpler event management. Better attribution across the full customer journey. Meta can now see that the same person who clicked your Instagram ad on Monday came into your store on Saturday. Before, that cross-channel journey was fragmented across two separate data systems.

The consolidation also collapsed the isolation. Your CRM data is now one parameter away from your online conversion data. Set action_source to "system_generated" and your HubSpot deals flow through CAPI with the same weight as your website purchase events. The algorithm does not distinguish between them. It treats both as ground truth.

If your CRM has clean data: that is a powerful unification. If your CRM has contaminated data: you have built a direct highway from your lead gen funnel's fraud problem into Andromeda's targeting model.

Most B2B companies have contaminated CRM data. The form-fill contamination rate on typical B2B lead gen runs 15-30% for unverified inbound. Finance and legal verticals hit 42% IVT per Fraudlogix 2026. SaaS free trial abuse runs higher. Nobody audits this systematically. Nobody tracks it back to their offline CAPI feed.


The B2B revenue loop problem

B2B is where offline conversions matter most and where the contamination problem is worst.

The journey: user clicks Meta ad, downloads a whitepaper, enters email. Sales follows up. Qualified lead. Discovery call. Proposal. Signed deal 90 days later. You upload the closed-won deal to CAPI as an offline Purchase event with high value. Meta matches it to the original ad click. Andromeda studies that buyer profile. Finds more people like them.

That loop is worth running. It is the most powerful signal you can give Meta for B2B targeting.

Now run the contaminated version. User clicks Meta ad. Bot fills out the lead form with a fake email. It passes validation. Goes into your CRM. Sales marks it as unresponsive after two attempts. Eventually goes cold. You batch-upload all closed-won deals to CAPI at end of month. But your data pipeline also picks up certain CRM stages and uploads them as Lead conversion events. The bot lead fires a Lead event to CAPI. Andromeda studies it.

Most B2B teams cannot tell me which CRM events are flowing to CAPI and which are not. They set up the integration, it runs, they check match rate, they move on. The contamination enters silently.

DataCops' HubSpot AI lead scoring scores inbound leads before they enter the pipeline and before offline events dispatch. Leads that score below quality thresholds are flagged before they become CAPI training signals. The fraud traffic validation layer catches bot sessions at the browser level before they become CRM contacts. Both layers running together mean the CRM data flowing to CAPI through Meta's offline event pipeline represents real buyers.


The three contamination sources in offline CAPI feeds

Bot-generated leads in your CRM. Your form gets filled by automated traffic. The submission looks real: realistic name, realistic email format, realistic company domain. It passes your validation. Goes into the CRM. If your sales team never interacts with it or marks it unresponsive, it may still flow to CAPI as a Lead event or even a qualified stage event. Andromeda studies a bot's behavioral profile and finds more traffic that looks like it.

Fraudulent orders and chargebacks. Ecommerce with offline order tracking (phone orders, in-store, manual orders): fraudulent transactions that later chargeback were real purchases at upload time. They went to CAPI as high-value Purchase events. The algorithm studied the buyer profile. Found more traffic like it. The chargeback came weeks later. The targeting damage was already done.

Stale or mis-timestamped records. Weekly batch uploads with upload date as the timestamp instead of actual conversion date. Meta's attribution model learns that your buyers convert at the upload schedule rather than at the actual purchase moment. The algorithm's picture of your conversion timing is distorted. Attribution to specific ad campaigns is blurred. The loop trains on smeared signal.


The implementation, correctly

This is a technical guide. Tools appear where they serve the argument.

Capture fbclid at every form submission. The fbclid from the Meta ad click URL must be stored in your CRM at the moment the contact is created. It cannot be added retroactively. Without it, Meta cannot attribute the offline event to the original ad click. Your CAPI offline event becomes unattributed noise instead of a closed revenue loop.

Use accurate per-event timestamps. The actual conversion date and time as Unix timestamp. Not the upload date. Not the batch processing date. The moment the event occurred. This is the most commonly wrong field in offline CAPI implementations.

Set action_source correctly. Physical store events: "physical_store." CRM events, phone orders, backend deals: "system_generated." This tells Meta how to weight and categorize the event. Wrong action_source means incorrect attribution windows and incorrect algorithm training context.

Deduplicate with order_id or deal_id. Include a unique identifier in custom_data so Meta does not double-count events that arrive through multiple paths. If your CRM fires a Lead event and your online tracking also fires a Lead event for the same form fill, they need matching identifiers for deduplication.

Filter before you fire. Check CRM records for fraud markers before they reach CAPI. Suspicious email domains against 160K+ fraud domain list. IP intelligence check on the original session that created the CRM record. Lead quality scoring before offline events dispatch. The contamination check at the front end is cheaper than the algorithm retraining cost at the back end.

For the Google-side equivalent, the offline conversion tracking from GCLID to upload guide covers the Google Ads implementation. For LinkedIn, the LinkedIn offline conversions guide covers the B2B pipeline specifically.


When DataCops is not the answer for offline conversions

For Shopify-only stores with simple in-store and phone order tracking: Meta's native CAPI integration handles offline events without additional tooling. The contamination risk is lower when order data comes from a POS system rather than a lead gen form.

For enterprise B2B with Salesforce as the CRM: Salesforce has native CAPI connectors. DataCops' HubSpot integration is on Business tier and above. If your CRM is Salesforce, the DataCops HubSpot connection is not relevant.

For teams with developers who can build custom CAPI integrations: direct API implementation with your own filtering logic is the right path. DataCops is an outcome. The API is the infrastructure. The filtering can be built custom.

For accounts that only need Meta-side offline tracking with no multi-platform requirement: Meta's native tooling or a Meta-specific connector like LeadsBridge or Zapier's CAPI integration handles the plumbing. DataCops at $49/month earns its cost when the full stack (first-party collection, bot filtering, multi-platform CAPI including Meta plus Google plus TikTok plus LinkedIn) is needed together.


Every offline conversion you send to CAPI is a training signal for Andromeda. The word "offline" no longer describes a separate system. It describes an action_source parameter in the same CAPI endpoint as your online conversions.

Your CRM data is flowing to Meta's algorithm right now. What percentage of the contacts in your CRM were generated by real humans with genuine intent to buy, and what percentage were bots, fake trials, or fraudulent submissions that made it through your lead gen funnel?

Andromeda is building a buyer profile from whatever is in there.


Live traffic quality

Updated just now

Visits · last 24h

487
Real users
35873.5%
Bots · auto-filtered
12926.5%

Without filtering, 26.5% of your reported traffic is bot noise inflating dashboards and draining ad spend.

Don't trust your analytics!

Make confident, data-driven decisions withactionable ad spend insights.

Setup in 2 minutes
No credit card