Matrix Support Doc

Make.com Stripe Webhook Setup for Server-Side Ad Tracking (2026)

Last Updated: May 2026

If you rely on browser pixels for ROAS measurement, you are losing between 30% and 40% of conversion data to ad blockers, Safari ITP, and iOS privacy restrictions. Configuring a Make.com Stripe webhook is the foundational first step to bypassing the browser entirely and transmitting verified payment events directly to your ad platforms.

This Guide Is For:

  • Media buyers building CAPI systems
  • Agency owners replacing expensive SaaS tracking tools
  • Operators configuring Stripe integration webhooks
  • Developers setting up server-side attribution pipelines

1. Why Stripe Webhooks Outperform Browser Pixels

Most tutorials teach you how to pass basic payment alerts into Slack using Stripe webhooks. That is a notification use case. The architecture documented here is a server-side attribution engine — a pipeline that intercepts verified payment events the moment they occur and routes the enriched data to Meta’s Conversions API and Google’s Enhanced Conversions endpoint simultaneously, bypassing every browser-level tracking restriction that would otherwise lose that conversion.

The fundamental reason Stripe webhooks outperform browser pixels for conversion attribution is the transmission origin. A browser pixel fires JavaScript from the user’s device — a device that may have an ad blocker installed, a browser with ITP enabled, or iOS privacy settings that prevent tracking. A Stripe webhook fires from Stripe’s own infrastructure to your Make.com endpoint the moment a payment is confirmed. It is a server-to-server transmission that never touches the user’s device, making it immune to every client-side privacy mechanism that degrades pixel accuracy.

The secondary advantage is event certainty. A browser pixel fires when the user lands on your thank-you page — before the payment is fully captured, before fraud checks run, and before any post-payment processing completes. A charge.succeeded webhook fires only after the funds are confirmed and the charge is captured. You are attributing verified revenue, not optimistic checkout completions. For ad platforms whose algorithms use conversion data to optimise bidding, verified payment events produce more accurate training signals than confirmation page loads.

According to Stripe’s official webhook documentation, Stripe retries failed webhook deliveries up to 16 times over three days using exponential backoff, ensuring your attribution pipeline receives every event even during temporary Make.com downtime or maintenance windows.

2. Generating the Make.com Webhook Endpoint

Before configuring anything in Stripe, you need the receiving endpoint — the URL where Stripe will send payment events. Make.com generates this automatically when you create a Custom Webhook module.

Step 1: Create the Webhook Module

Open Make.com and create a new scenario. Click the plus icon to add a module. Search for Webhooks in the module search and select Custom Webhook. Click Add to create a new webhook configuration. Name it something descriptive — “Stripe Tracking Catcher” or “Stripe CAPI Pipeline” — and click Save. Make.com generates a unique endpoint URL in the format https://hook.us1.make.com/abc123xyz.... Copy this URL to your clipboard.

Step 2: Put the Scenario in Listening Mode

Click Run Once in your Make.com scenario. This puts the webhook module into listening mode — it will wait for the next incoming request and use its data structure to automatically detect the field schema. Do not close the scenario tab. You will need it open when you trigger the first test event from Stripe.

Important: The Make.com webhook URL is tied to the specific webhook module in your scenario. If you delete and recreate the webhook module, a new URL is generated and the old URL becomes inactive. Always copy and use the URL generated by the specific module you intend to keep in your production scenario.

3. Configuring the Stripe Webhook

With your Make.com endpoint URL copied, navigate to the Stripe Webhooks section under Developers in your Stripe dashboard. Click Add an Endpoint and paste your Make.com URL into the endpoint URL field.

Step 3: Select Events — This Is Critical

Under the Select events to listen to menu, do not select all events. Search for and select only charge.succeeded. This event fires exclusively when a payment is fully captured and confirmed. Listening to all events or to checkout.session.completed alone risks sending unconfirmed or test events to your ad platforms, inflating conversion counts with events that may not represent real revenue. For subscription businesses, also add invoice.payment_succeeded as a separate endpoint if you want to track recurring charges.

💳
Stripe
charge.succeeded fires
⚙️
Make.com
Parses, hashes, routes
🎯
Meta + Google
Verified attribution

4. Capturing Click IDs Before Checkout

The webhook configuration handles data transmission. But the data is only as useful as the information it contains. For server-side attribution to link a conversion back to the specific ad click that drove it, the fbclid (Meta Click ID) and gclid (Google Click ID) must travel from your landing page through checkout and into the Stripe payment metadata, where they are available in the webhook payload.

This is the step most guides skip, and it is the reason many Make.com Stripe webhook setups catch the payment data but cannot attribute it to the right ad. The click ID disappears between landing page and payment confirmation because no mechanism was put in place to carry it forward.

Click ID Capture Implementation

  1. Capture at landing page: Add JavaScript that reads fbclid and gclid from the URL parameters when the page loads and stores them in sessionStorage or in hidden form fields within your checkout form.
  2. Pass to Stripe metadata: When creating the Stripe Checkout session or Payment Intent via your backend, retrieve the stored click IDs and include them in the metadata object. Example: metadata: { fbclid: session.get('fbclid'), gclid: session.get('gclid'), utm_source: session.get('utm_source') }
  3. Verify in Stripe dashboard: After a test checkout, open the charge in Stripe and expand the Metadata section. Confirm the fbclid and gclid appear as metadata keys. If they are absent, the capture or pass-through step is failing.
  4. Available in webhook: Once metadata is set on the Stripe session, it appears in the charge.succeeded webhook payload under data.object.metadata, where Make.com can extract it for routing to Meta and Google APIs.

5. The Webhook Payload Structure

When a successful purchase occurs, Stripe fires a JSON payload to your Make.com webhook endpoint. Here is the exact structure for a correctly configured tracking payload, including the metadata fields that carry click IDs and UTM parameters:

{
  "id": "evt_123456789",
  "type": "charge.succeeded",
  "data": {
    "object": {
      "id": "ch_3Pxxxxxxxxxxxxx",
      "amount": 99700,
      "currency": "usd",
      "billing_details": {
        "email": "customer@example.com",
        "phone": "+14155551234",
        "name": "Jane Operator"
      },
      "metadata": {
        "fbclid": "IwAR2xyz123abc...",
        "gclid": "Cj0KCQiA_qG5BhDTARIsAA...",
        "utm_source": "facebook",
        "utm_campaign": "Q2_Retargeting",
        "utm_medium": "cpc"
      },
      "customer": "cus_Pxxxxxxxxxxxxxx",
      "balance_transaction": "txn_3Pxxxxxxxxxxxxx"
    }
  }
}

Key fields to note: amount is in cents — divide by 100 to get dollars. The metadata object contains the click IDs and UTM parameters you passed from checkout. The billing_details object contains the customer PII that must be normalised and hashed before transmission to any ad platform API. The id under data.object is the Charge ID — this is your event_id for Meta CAPI deduplication.

6. Parsing and Hashing the Payload in Make.com

After Make.com receives the webhook payload, the next modules in the scenario parse the JSON structure and apply the PII normalisation and hashing required by both Meta CAPI and Google Enhanced Conversions before any data is transmitted to an ad platform API.

Step 4: Map the Webhook Fields

Make.com automatically detects the payload structure from the first received event and allows you to map fields directly in subsequent modules. Map data.object.billing_details.email as your email source, data.object.amount divided by 100 as conversion value, data.object.metadata.fbclid as the fbc parameter source, and data.object.id as the event_id for deduplication.

Step 5: Normalise and SHA-256 Hash PII

Add a Tools module set to Text Functions before any API call modules. For email: apply toLower(trim(email)) then pass the result to a SHA-256 hash function. For phone: strip all non-digit characters and add country code prefix, then SHA-256 hash. Use Make.com’s built-in crypto functions — search for SHA256 in the function list inside any text field. The complete normalisation sequence for both Meta and Google requirements is documented in our CAPI match quality guide.

Hash After Normalise — Never Before

If you apply SHA-256 before lowercasing the email, you produce a valid hash that does not match Meta’s or Google’s stored hash for the same email address. The API accepts the payload without error but the customer match fails silently, producing an upload with zero attribution value. Always normalise first, hash second.

7. Routing to Meta CAPI and Google Enhanced Conversions

With the payload parsed and hashed, add a Router module to branch the data into two simultaneous paths. Path A sends the Meta CAPI payload. Path B sends the Google Enhanced Conversions payload. Both execute from the single charge.succeeded trigger.

For Path A (Meta CAPI), add an HTTP Make a Request module pointing to https://graph.facebook.com/v19.0/{PIXEL_ID}/events with the hashed user_data object, event_name: "Purchase", the event_id set to the Stripe Charge ID for deduplication, and custom_data.value set to the net conversion amount. The complete payload structure is documented in our CAPI deduplication guide.

For Path B (Google Enhanced Conversions), use Make.com’s native Google Ads module or an HTTP call to Google’s conversion upload endpoint with the hashed email in the user_identifiers array, the gclid from the payment metadata, and the conversion value and timestamp. The complete Google payload structure is in our Google Enhanced Conversions guide.

8. Testing and Verification

Testing the Full Pipeline

  1. Stripe Test Mode: Use Stripe’s test card 4242 4242 4242 4242 with any future expiry and any CVV to trigger a test charge.succeeded event without real money moving.
  2. Make.com Run History: After the test payment fires, check Make.com’s execution history for the scenario. Verify all modules show green status icons. Click the webhook module output to inspect the parsed payload and confirm all expected fields — including fbclid and gclid in metadata — are populated correctly.
  3. Stripe Webhook Dashboard: In Stripe under Developers then Webhooks, click your endpoint to see delivery attempt history. A successful delivery shows a 200 status code. If Make.com returns a non-200 response, Stripe records the error and retries. The full request and response bodies are visible in the attempt details.
  4. Meta Test Events: In Meta Events Manager, navigate to your pixel and open the Test Events tab. Send a live test using the same flow to verify the server event appears alongside the browser pixel event with the same event_id, confirming deduplication is configured correctly.
  5. Google Diagnostics: In Google Ads under Goals then Conversions, check the Diagnostics tab for your Enhanced Conversion action. Allow 48 to 72 hours for initial match rate statistics to populate after the first test upload.

Related Attribution Guides

Complete Your Attribution Architecture

Intercepting the webhook is the foundation. Deploy the full server-side attribution pipeline — webhook catch, PII hashing, Meta CAPI routing, and Google Enhanced Conversions — from a single Make.com scenario.

Get the Complete Make.com Attribution Blueprint →

9. Frequently Asked Questions

How do I set up a Make.com Stripe webhook?

Generate a Custom Webhook URL in a Make.com scenario using the Webhooks module and click Add. Copy the generated endpoint URL and paste it into Stripe under Developers then Webhooks then Add an Endpoint. Select charge.succeeded as the event to listen for. Return to Make.com and click Run Once to put the scenario in listening mode, then trigger a test payment in Stripe to send the first payload and allow Make.com to automatically detect the data structure.

What Stripe event should I listen for when building a tracking system?

For server-side ad attribution, listen strictly for charge.succeeded. This event fires only when a payment is fully captured and funds are confirmed, ensuring you only send verified conversions to your ad platforms. Listening to all events risks sending test events, failed payment attempts, or duplicate signals that inflate reported conversion counts and corrupt ad algorithm training data.

How do I pass fbclid to Stripe so it appears in the webhook?

Capture the fbclid from your landing page URL using JavaScript when the page loads and store it in a session variable. When your checkout session is created via Stripe Checkout or a Payment Intent, include the fbclid in the metadata object. It then appears in the charge.succeeded webhook payload under data.object.metadata.fbclid where Make.com can extract and route it to the Meta CAPI payload as the fbc parameter.

Why use a Make.com Stripe webhook instead of a browser pixel?

Browser pixels fire JavaScript from the user’s device and are blocked by ad blockers, Safari ITP, and iOS privacy frameworks — causing 30% to 40% conversion data loss in most audiences and higher rates in technical B2B segments. A Make.com Stripe webhook fires server-to-server from Stripe’s infrastructure to your Make.com endpoint, bypassing the browser entirely. It cannot be blocked by device-level privacy settings because the transmission never touches the user’s device.

Can I route one Stripe webhook to both Meta CAPI and Google Enhanced Conversions simultaneously?

Yes. Make.com’s Router module allows a single incoming webhook to branch into multiple simultaneous execution paths within the same scenario. One branch sends the hashed payload to the Meta Graph API conversions endpoint. A second branch sends to the Google Ads API Enhanced Conversions endpoint. Both fire simultaneously from a single charge.succeeded event with no additional Stripe configuration required.

How do you normalise and hash customer PII before sending to ad platforms?

For email: lowercase the string and strip leading and trailing whitespace using Make.com’s toLower(trim()) functions, then apply SHA-256. For phone: include the country code prefix and use digits only with no spaces, dashes, or brackets, then apply SHA-256. Both Meta CAPI and Google Enhanced Conversions require normalisation before hashing — hashing before normalising produces hash values that fail to match either platform’s stored user records even when the underlying contact information is correct.

What should you do if the Make.com Stripe webhook stops receiving events?

Check three things in order. First, confirm the Make.com scenario is activated — inactive scenarios do not process incoming webhooks. Second, check the Stripe Webhooks dashboard for recent delivery attempts and their status codes. Stripe retries failed deliveries and the full request and response history is visible in the endpoint detail. Third, verify the endpoint URL in Stripe matches the current Make.com webhook URL exactly, as regenerating a webhook module in Make.com produces a new URL that must be updated in Stripe.

How do you test a Make.com Stripe webhook setup before going live?

Use Stripe’s built-in test webhook tool under Developers then Webhooks. Select your endpoint and click Send Test Webhook to fire a synthetic charge.succeeded event. In Make.com, click Run Once before triggering the test so the scenario is in listening mode. After the test fires, Make.com displays the full payload structure and allows you to map fields for downstream modules. For a more realistic test, use Stripe’s test card 4242 4242 4242 4242 to complete an actual test checkout with your metadata fields populated.

Transparency Protocol: CreatorOpsMatrix operates as an independent technical research hub evaluating workflow automation and attribution software. Make.com linked across this page is a partner affiliate link. If you build your infrastructure using this route, we earn a commission at zero additional cost to you. Stripe is documented as a standard reference with no affiliate relationship. We only document tools we have actively tested in production environments.
Operator Responsibility: The webhook configurations, payload structures, and API routing sequences documented across CreatorOpsMatrix are strictly for educational and informational purposes. Stripe API field names, event structures, and webhook retry behaviour are subject to change. Verify current Stripe webhook event payloads directly with Stripe’s developer documentation before deploying in production. You are solely responsible for testing and validating your attribution pipeline before using its outputs for business decisions.

Scroll to Top