HubSpot to Facebook Offline Conversions With Zapier: The 2026 Setup
If you built a Zap that sends HubSpot conversions to Facebook before mid 2024, it is almost certainly dead. Zapier blocked new Zaps on the Facebook Offline Conversions app on 4 June 2024, and every existing Zap using it stopped running on 1 May 2025, because Meta retired the Offline Conversions API underneath it.
Most of the guides still ranking for this topic describe that dead app. They tell you to pick “Send Offline Event” inside an action that no longer accepts new connections. This guide covers what actually works now.
Quick answer
To send HubSpot offline conversions to Meta through Zapier in 2026, use the Facebook Conversions app (or Facebook Conversions for Business admins), not Facebook Offline Conversions. Which action you pick depends on where the lead came from:
| Your lead source | Zapier action | Match key | action_source |
|---|---|---|---|
| Meta lead ads (instant forms) | Send Funnel Event | lead_id from Meta, unhashed | system_generated |
| Website form after a Meta ad click | Send Other Event or Send Lead Event | Hashed email, phone, fbc, fbp | website or physical_store |
| Genuinely offline (call, demo, event) | Send Other Event or Send Purchase Event | Hashed email and phone | physical_store |
If your Meta spend goes to lead ads, the first row is the one that matters, and it is the row almost nobody writes about. Using lead_id gets you near perfect matching with no personal data leaving HubSpot.
Key takeaways
- The Facebook Offline Conversions Zapier app is retired. Existing Zaps stopped on 1 May 2025.
- The replacement is the Facebook Conversions app, which posts to Meta’s Conversions API and requires a Dataset ID from Events Manager rather than an offline event set.
- HubSpot’s own native Meta integration cannot fire on deal stages. That single limitation is the honest reason most B2B SaaS teams still need Zapier.
- For Meta lead ads, send funnel events keyed on
lead_idwithaction_sourceset tosystem_generated. No hashing, no match rate problem. - Meta accepts an
event_timeup to 7 days old. Send the stage change within a week of it happening, or the event is rejected. - Send fewer, better events. Two or three meaningful pipeline stages beat eight noisy ones.
What changed, and why your old Zap broke
Meta used to run two separate systems. The Pixel handled browser events. The Offline Conversions API handled uploads of in person and CRM conversions into an “offline event set”. Zapier’s Facebook Offline Conversions app talked to the second one.
Meta then consolidated everything into a single Conversions API, and everything now writes into a dataset instead of a pixel or an offline event set. Offline events did not disappear. They became a normal Conversions API event with action_source set to physical_store.
Zapier followed. Here is the migration in plain terms:
| Then | Now |
|---|---|
| App: Facebook Offline Conversions | App: Facebook Conversions, or Facebook Conversions (for Business admins) |
| Action: Send Offline Event | Action: Send Purchase Event, Send Other Event, Send Lead Event or Send Funnel Event |
| Destination: offline event set | Destination: Dataset, selected or created in Events Manager |
| Offline flag was implicit | You set Action Source explicitly, usually Physical Store |
| Worked until 1 May 2025 | Current |
If you still have a paused or erroring Zap on the old app, do not try to repair it. Rebuild it on the new app. The old one cannot be reconnected.
Native HubSpot integration or Zapier? The real decision
HubSpot does ship a native Meta Conversions API sync, and the honest advice is to use it when it fits. It is free with your existing subscription and there is nothing to maintain. But its limits are specific, and they are what push B2B SaaS teams to Zapier.
| HubSpot native Meta CAPI | Zapier + Facebook Conversions | |
|---|---|---|
| Cost | Included with Marketing Hub Starter, Professional or Enterprise | Free plan covers a simple 2 step Zap at 100 tasks a month; Professional from about $19.99 a month for filters and multi step |
| Fires on lifecycle stage change | Yes, including custom stages | Yes |
| Fires on deal stage change | No | Yes |
| Fires on form submission | Yes, HubSpot forms only | Yes, any trigger HubSpot exposes |
| Fires on a custom property change | No | Yes |
| Conditional filtering before sending | No | Yes, filter on score, deal size, owner, anything |
| Event limit | 5 (Starter), 50 (Professional), 100 (Enterprise) | Practical limit is your task allowance |
| Sends deal revenue as event value | Not for deal based events | Yes |
| Requires Meta pixel installed in HubSpot | Yes | No |
| Requires ad account inside a Business Manager | Yes | Yes |
| Maintenance | None | You own the Zap |
The short version. If your only conversion signal is a HubSpot form submission or a lifecycle stage change, use the native integration and skip Zapier entirely. If you want Meta to optimise toward Closed Won, toward deals above a certain value, or toward an SQL that a rep actually accepted, the native integration cannot do it and Zapier can.
Plenty of teams run both: native for the top of funnel Lead event, Zapier for the two or three deeper stages that matter commercially.
Before you build anything
Get these four things in place first. Skipping them is the cause of most failed setups.
- A dataset in Events Manager. Open Meta Events Manager, then Data sources. If you already run a pixel, it has become a dataset and you can reuse it. Note the dataset ID.
- Business Manager access. Your ad account has to sit inside a Business Manager account, and your user needs permission on the dataset, not just the ad account.
- Partner permission for Zapier. In Events Manager, open your data source, then Settings, then Conversions API, then Choose a partner, then Zapier, and turn the permission on. Do this before you build the Zap and you avoid the single most common connection error.
- A decision about which stages you will send. Write them down before you open Zapier. Three stages is usually right for B2B SaaS.
Path A: Meta lead ads leads, using funnel events
This is the right path when the lead filled in a Meta instant form. Meta generates a leadgen_id for that lead, HubSpot stores it, and you send pipeline updates back against that ID. Matching is essentially perfect because you are handing Meta its own identifier back.
Step 1. Confirm the lead ID is reaching HubSpot. If you use HubSpot’s native Meta lead ads sync, the Meta lead ID lands on the contact record. Check a recent contact from a lead ad and find the property that holds it. If it is not there, this path will not work and you should use Path B.
Step 2. Build the trigger. In Zapier, create a Zap with HubSpot as the trigger. For pipeline movement, use Updated Deal Stage or New Contact Property Change on your lifecycle stage property.
Step 3. Filter. Add a Filter step so the Zap only continues when the Meta lead ID property is not empty, and when the stage matches the one you want to report. This keeps organic and non Meta leads out of the feed.
Step 4. Add the action. Choose Facebook Conversions, then Send Funnel Event. Connect the account that has permission on the dataset.
Step 5. Map the fields.
| Field | What to map | Notes |
|---|---|---|
| Dataset | Your dataset from Events Manager | Not an offline event set |
| Lead ID | HubSpot’s Meta lead ID property | A 15 or 16 digit number. Never hash it |
| Event Name | Your stage name | Meta’s own examples are Initial Lead, Marketing Qualified Lead, Sales Opportunity, Converted |
| Event Time | HubSpot’s timestamp for the stage change | Must be within 7 days |
| Action Source | system_generated | This is what marks it as a CRM event |
| Lead Event Source | HubSpot | Meta expects the CRM name here |
| Value and Currency | Deal amount, on your revenue stage only | Optional but worth doing |
Step 6. Send the early stages too. Meta’s guidance is to send every stage as it updates, including the initial lead stage, not just the deep ones. The model needs the full shape of the funnel to learn what an eventual customer looks like early.
Because matching uses lead_id rather than personal data, no hashed email or phone is required, and a long sales cycle is not a problem. The lead ID keeps the connection to the original ad however many weeks later the deal closes.
Path B: website leads and true offline conversions
Use this when the lead came from a form on your own site after clicking a Meta ad, or when the conversion genuinely happened away from the browser, such as a sales call or a signed contract.
Step 1. Trigger. HubSpot, then Updated Deal Stage or Contact Recently Created or Updated.
Step 2. Filter. Continue only when the stage is the one you care about and, ideally, when the original source indicates paid social. Sending your entire database is the fastest way to teach Meta nothing.
Step 3. Action. Facebook Conversions, then Send Purchase Event for revenue events, or Send Other Event for everything else.
Step 4. Map the fields.
| Field | What to map | Notes |
|---|---|---|
| Dataset | Your dataset ID | Required |
| Action Source | Physical Store for offline events, Website for online form fills | Meta requires physical_store for offline and in store events |
| Event Name | Lead, Purchase, or your own name such as SQL | Use a standard event name where one fits |
| Event Time | The HubSpot timestamp of the stage change | Up to 7 days old. Store transactions should be uploaded within 62 days of the conversion |
| Contact email | Hashed automatically | |
| Phone | Contact phone in E.164 format | Hashed automatically |
| First and last name, city, state, zip, country | Contact properties | All hashed automatically. Each one lifts match rate |
| External ID | HubSpot contact ID or record ID | Hashing recommended, handled for you |
| Click ID (fbc) and Browser ID (fbp) | Stored cookie values, if you capture them | Not hashed. These are the strongest signals you can send |
| Order ID | HubSpot deal ID | Use this for deduplication. Meta prefers order_id |
| Value and Currency | Deal amount and currency | Required for Purchase events |
Step 5. Capture fbc and fbp if you possibly can. Add hidden fields to your HubSpot forms that store the _fbc and _fbp cookie values at submission. This is the single highest leverage change on this entire list. Email matching is decent. Click ID matching is exact.
Which pipeline stages should a B2B SaaS actually send?
More events is not better. Meta’s optimisation needs volume at whichever event you optimise toward, and B2B pipelines are thin at the bottom. A sensible default:
| Stage | Send it? | Event name | Value to send | Why |
|---|---|---|---|---|
| Form submitted | Yes | Lead | None | Baseline volume, and the anchor for everything after |
| MQL | Yes | Your own name, e.g. MQL | None | Usually the deepest stage with enough volume to optimise on |
| Demo held or SQL accepted | Yes | Your own name, e.g. SQL | Optional pipeline value | The first stage a human has validated |
| Opportunity created | Only at scale | Sales Opportunity | Deal amount | Useful once you exceed roughly 50 a month |
| Closed Won | Yes, for reporting | Purchase | Actual contract value | Rarely enough volume to optimise on, but it is what proves ROI |
| Everything else | No | Noise |
The rule of thumb: optimise on the deepest stage that produces enough weekly volume for Meta to exit the learning phase, and report on everything below it. For most B2B SaaS teams that means optimising to MQL or SQL and reporting on Closed Won.
Checking that it actually works
Do not trust a green Zap. Verify on Meta’s side.
| Where | What to check | Healthy sign |
|---|---|---|
| Zapier, Zap history | Task success rate and error logs | No repeated errors, no filtered-out tasks you expected to pass |
| Events Manager, Overview | Events arriving against your dataset | Events appear, usually within a couple of hours |
| Events Manager, Event Match Quality | The score Meta assigns your matching | The higher the better. Adding phone, fbc and fbp is what moves it |
| Events Manager, Diagnostics | Warnings about missing or malformed parameters | Empty |
| Ads Manager, custom columns | Your event as a reportable column, split by campaign | Conversions attributed to campaigns, not just to the account |
Give it a week before you judge anything. Then give any new optimisation target another two weeks to leave the learning phase before you touch budgets.
Common failures and what causes them
| Symptom | Cause | Fix |
|---|---|---|
| Zap errors on connecting Facebook | Zapier not authorised as a CAPI partner | Events Manager, data source, Settings, Conversions API, Choose a partner, Zapier, enable |
| ”Dataset not found” | Using an old offline event set ID | Use the dataset ID from Data sources in Events Manager |
| Events accepted but nothing attributes | No usable match key | Add phone, external ID, and above all fbc and fbp. For lead ads, switch to lead_id funnel events |
| Events rejected with a time error | event_time older than 7 days | Trigger on the stage change itself, not on a nightly batch |
| Match quality stuck low | Only sending email, and often a shared or generic work address | Add more parameters. Generic addresses like info@ rarely match a personal Meta account |
| Duplicate conversions | The same deal sent by two Zaps, or by Zapier and the native integration at once | Send order_id (the deal ID) on every event and pick one system per event name |
| Task usage spikes | No filter, so every property change fires | Filter hard at step two. Only continue on the exact stage transitions you care about |
| Test passes, live does nothing | Mapped fields that are empty on real records | Test with a real record that has the properties populated |
Does this work with CRMs other than HubSpot?
Yes, and the pattern is identical. Zapier’s Facebook Conversions app does not care which app the trigger came from, so the same structure works for Salesforce, Pipedrive, Close, a Google Sheet, or a plain webhook. Swap the trigger, keep the filter, keep the field mapping, keep the dataset. Only the property names change.
What to do this week
- Check whether you have a broken Zap on the retired app. If yes, rebuild it, do not repair it.
- Decide whether the native HubSpot integration covers you. If you only need form submissions and lifecycle stages, it does.
- If you need deal stages, build one Zap, for one stage, keyed on lead_id if your leads come from Meta instant forms.
- Add hidden fbc and fbp fields to your HubSpot forms.
- Wait a week, check Event Match Quality, then add the second stage.
Start with one event. A single reliable SQL event beats six unreliable ones, every time.
Frequently asked questions
Why did my Facebook Offline Conversions Zap stop working?
Meta retired the Offline Conversions API that the app was built on. Zapier stopped allowing new Zaps on that app on 4 June 2024, and existing Zaps stopped running on 1 May 2025. You need to rebuild on the Facebook Conversions app.
What replaced offline event sets?
Datasets. In Events Manager, what used to be a pixel or an offline event set is now a dataset, and every event type writes to it. Offline events are now ordinary Conversions API events with the action source set to physical_store.
Do I still need the Meta pixel?
For the Zapier route, no. The Zap posts server to server. But you should still run the pixel, because the _fbc and _fbp cookies it sets are the strongest match keys you can attach to a server event.
Can HubSpot’s native Meta integration send deal stage conversions?
No. HubSpot’s native ad conversion events fire on lifecycle stage changes, HubSpot form submissions and page views. Deal stages are not a supported trigger, which is the main reason B2B SaaS teams add Zapier.
How many conversion events does the native HubSpot integration allow?
Five on Marketing Hub Starter, fifty on Professional and one hundred on Enterprise. It also only works with forms built in HubSpot, and requires your ad account to sit inside a Business Manager account.
What Zapier plan do I need?
A basic two step Zap can run on the free plan within its 100 monthly tasks. The moment you add a filter, which you should, it becomes a multi step Zap and needs Professional, which starts around $19.99 a month and scales with your task volume. Budget by how many stage changes you expect per month, not by the headline price.
How far back can I send a conversion?
The event_time you stamp on an event can be up to 7 days old. Physical store transactions should be uploaded within 62 days of the conversion. This is why you should trigger on the stage change as it happens rather than uploading a monthly batch.
My deals take three months to close. Does offline conversion tracking still work?
Yes, as long as you send each stage change within a week of it happening. The 7 day limit applies to how stale the event is when you send it, not to how long ago the click was. For Meta lead ads leads, the lead_id keeps the link to the original ad indefinitely.
Should I hash the data before sending it?
No. Email, phone, name, city, state, zip and country are hashed for you. Click ID, Browser ID and lead ID must not be hashed at all. Do not pre hash anything yourself.
What is a good Event Match Quality score?
Higher is better, and the honest answer is that the absolute number matters less than the trend after you add parameters. Sending email alone scores poorly. Adding phone, external ID, and especially the fbc and fbp cookie values is what moves it.
Why is my match rate low even though I send email addresses?
B2B is harder than B2C here. Work email addresses are frequently not the address attached to someone’s personal Meta account, and generic addresses like info@ or sales@ almost never match. Capture the click ID instead of relying on email.
Can I send revenue back to Meta?
Yes. Map the HubSpot deal amount to the Value field and set Currency on a Send Purchase Event action. Send the deal ID as Order ID so the same deal cannot be counted twice.
How do I stop duplicate conversions?
Send a stable Order ID, which for HubSpot should be the deal ID. Meta prefers order_id for deduplication and applies a 7 day deduplication window. Also make sure the same event name is not being sent by both Zapier and the native HubSpot integration.
Will this fix my attribution after iOS privacy changes?
It helps materially, because server side events are not blocked by browser or app level tracking restrictions the way pixel events are. It does not restore everything. Treat it as recovering signal for optimisation rather than as a perfect audit trail.
Is this GDPR compliant?
Sending CRM data to Meta is a data sharing activity, so you need a lawful basis and appropriate consent, and you should reflect it in your privacy notice and processing records. Automatic hashing reduces exposure but does not remove the obligation. Take your own legal advice on your specific setup.
What is the most common mistake?
Sending too many low value events with no filtering. Every contact property change becomes a conversion, Meta optimises toward a meaningless signal, and your task bill goes up. Pick two or three stages that genuinely predict revenue and send only those.
Need this built and maintained?
We set up offline conversion tracking for B2B SaaS companies across Meta, Google and LinkedIn, then run the campaigns that use it. If you want your pipeline stages feeding your ad platforms properly, without a broken Zap you find out about three months later, let’s talk.
Related reading
- HubSpot offline conversions to every ad platform: the 2026 guide
- How to send offline conversions from HubSpot to Facebook Ads, the native method
- How to send offline conversions from HubSpot to Google Ads
- How to send offline conversions from HubSpot to LinkedIn Ads
- RevOps on HubSpot for B2B SaaS, the complete guide
- How to eliminate junk leads from Meta and Google
Sources
- Zapier Help Center, Changes impacting Facebook Offline Conversions users: https://help.zapier.com/hc/en-us/articles/26967162052493-Changes-impacting-Facebook-Offline-Conversions-users
- Meta for Developers, Sending Offline Events Using the Conversions API: https://developers.facebook.com/documentation/ads-commerce/conversions-api/offline-events
- Meta for Developers, Conversions API CRM Integration: https://developers.facebook.com/docs/marketing-api/conversions-api/guides/crm-integration
- Meta for Developers, Conversions API Parameters: https://developers.facebook.com/documentation/ads-commerce/conversions-api/parameters
- HubSpot Knowledge Base, Create and sync ad conversion events with your Meta Ads accounts using Meta’s Conversions API: https://knowledge.hubspot.com/ads/create-and-sync-ad-conversion-events-with-your-meta-ads-accounts-using-metas-conversion-api
- Zapier, HubSpot and Facebook Conversions integrations: https://zapier.com/apps/hubspot/integrations/facebook-conversions
- Zapier pricing: https://zapier.com/pricing