{"product_id":"n8n-workflow-deduplicate-server-side-meta-capi-conversions","title":"n8n Workflow: Deduplicate Server-Side Meta CAPI Conversions","description":"\u003ch3\u003eDeduplicate Meta Conversions API events before they hit Facebook—using n8n\u003c\/h3\u003e\n\u003cp\u003eThis \u003cstrong\u003en8n workflow\u003c\/strong\u003e receives server-side Meta CAPI conversion events via a webhook, normalizes and hashes supported identifiers, \u003cstrong\u003ededuplicates retries\u003c\/strong\u003e with an n8n \u003cstrong\u003eData Table\u003c\/strong\u003e, and then \u003cstrong\u003esubmits the validated event to the Meta Conversions API\u003c\/strong\u003e (Graph API) to confirm Meta accepted it.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReceives conversion events\u003c\/strong\u003e: Listens for \u003ccode\u003ePOST\u003c\/code\u003e webhook requests containing a conversion event in plain JSON.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eNormalizes fields and time\u003c\/strong\u003e: Normalizes event fields (including event time) and repairs the \u003ccode\u003efbc\u003c\/code\u003e value from a raw \u003ccode\u003efbclid\u003c\/code\u003e when needed.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eDeduplicates retries\u003c\/strong\u003e: Checks an n8n \u003cstrong\u003eData Table\u003c\/strong\u003e for an existing dedupe key and \u003cem\u003estops duplicates before they reach Meta\u003c\/em\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eHashes supported identifiers\u003c\/strong\u003e: Records the event’s dedupe key in the Data Table and applies \u003cstrong\u003eSHA-256 hashing\u003c\/strong\u003e to user identifiers such as email, phone, name, city, zip, and country.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBuilds the Meta payload\u003c\/strong\u003e: Creates a Meta Conversions API payload including \u003ccode\u003eevent_id\u003c\/code\u003e, required action\/source fields, and unhashed \u003ccode\u003eexternal_id\u003c\/code\u003e, plus an optional \u003ccode\u003etest_event_code\u003c\/code\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eValidates Meta response\u003c\/strong\u003e: Sends the event to the Meta Graph API endpoint for your pixel\/dataset and verifies \u003ccode\u003eevents_received\u003c\/code\u003e in the response body.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003ePrevent double-counting when your backend or CRM retries webhook deliveries.\u003c\/li\u003e\n  \u003cli\u003eEnsure consistent Meta CAPI event submission for SaaS signup, purchase, or lead conversions with reliable deduplication.\u003c\/li\u003e\n  \u003cli\u003eImprove server-side conversion accuracy by standardizing timestamps and repairing \u003ccode\u003efbc\u003c\/code\u003e from \u003ccode\u003efbclid\u003c\/code\u003e.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003en8n Webhook\u003c\/strong\u003e (incoming conversion JSON)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003en8n Data Table\u003c\/strong\u003e (dedupe storage via \u003ccode\u003ededupe_key\u003c\/code\u003e)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCode + Crypto\u003c\/strong\u003e (field normalization and \u003cstrong\u003eSHA-256\u003c\/strong\u003e hashing)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSet\u003c\/strong\u003e (payload assembly)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eHTTP request\u003c\/strong\u003e to Meta \u003cstrong\u003eGraph API\u003c\/strong\u003e using an HTTP Query Auth credential named \u003ccode\u003eaccess_token\u003c\/code\u003e\n\u003c\/li\u003e\n  \u003cli\u003eNodes\/inputs referenced: \u003cstrong\u003eset, code, crypto, webhook, data table, sticky note\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSetup\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eCreate a Data Table with a \u003ccode\u003ededupe_key\u003c\/code\u003e text column and set its name in the workflow Settings.\u003c\/li\u003e\n  \u003cli\u003eProvide your Meta pixel\/dataset ID and Graph API version in Settings.\u003c\/li\u003e\n  \u003cli\u003eAdd your Meta access token as an HTTP Query Auth credential named \u003ccode\u003eaccess_token\u003c\/code\u003e and attach it to the Meta HTTP request.\u003c\/li\u003e\n  \u003cli\u003eCopy the webhook production URL and configure your CRM, backend, or form provider to POST conversion events to it.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":45748948074675,"sku":"N8N-17674","price":76.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/m0Q3_F7FnuHb2Vtu8l09G_YBD2OWIy.png?v=1785575782","url":"https:\/\/buyflowscripts.com\/products\/n8n-workflow-deduplicate-server-side-meta-capi-conversions","provider":"N8N Commerce","version":"1.0","type":"link"}