Developer Needed: Quiz Funnel → Stripe → N8N Integration with FB CAPI Tracking

Posted 2 months ago

Worldwide

Summary

n8n + Stripe + Inlead (Quiz) Integration — ID Join, Google Sheets Status, CAPI, Fulfillment Trigger
Summary
I run a quiz funnel (built on Inlead) that sends users to Stripe Checkout for payment. I need a developer to wire a robust, end-to-end integration in n8n that:
Captures a unique identifier from the quiz named as “code”,


Sends all quiz answers + tracking to n8n
Already set up
Creates a Stripe Checkout Session with that identifier,
Receives Stripe webhooks and matches the payment back to the quiz submission,
Updates Google Sheets with a status column (e.g., pending → paid) and payment details,
Sends Facebook CAPI Purchase events with preserved fbclid (dedup-safe), and


Triggers a fulfillment workflow in n8n (compose a prompt from quiz answers, send confirmation email, and log fulfillment status back to the sheet).


Important: We currently use a static buy.stripe.com Payment Link. You’ll switch this to creating a Checkout Session via API so we can pass our unique ID through client_reference_id and/or metadata.

Objectives
Deterministic join between quiz and payment using a single ID (provided by the quiz).
Google Sheets becomes the source of truth with a clear status column auto-updated by Stripe webhooks.
Accurate attribution via Facebook CAPI with fbclid preserved from first touch to purchase.
Automated fulfillment: when a row flips to paid, n8n composes a prompt from quiz answers, triggers downstream tools (you’ll scaffold this)



Scope of Work
1) Unique Identifier & Tracking
Extract the quiz’s unique code/ID (e.g., body.code from Inlead webhook).
Persist fbclid from landing to purchase (carry through your webhooks/Checkout).


2) Inlead → n8n (Quiz Intake)
Configure Inlead webhook to send all answers + unique ID + fbclid to n8n.
Append a row to Google Sheets with columns (suggested schema):
quiz_id (unique), created_at, name, email, phone (if any),
answers_json (or normalized columns),
fbclid, utm_* fields,
status (default pending), paid_at (blank), session_id, payment_intent, amount, currency (blank initially).


3) Stripe Checkout Session (Created from n8n)
Replace static Payment Link redirect with Create Checkout Session API call (Stripe node or HTTP Request).
Pass:
client_reference_id = quiz_id,
metadata.lead_code = quiz_id,
success_url includes session_id + quiz_id,
cancel_url standard,
Idempotency-Key = quiz_id.

Redirect user to session.url returned by Stripe (builder supports redirect via response or via a small bridge endpoint—implement whichever is feasible).


4) Stripe → n8n (Webhook)
Handle checkout.session.completed.

Extract join key:
client_reference_id or metadata.lead_code.
Lookup the Sheet row by quiz_id and update:
status = paid,
paid_at (timestamp),
stripe_session_id, payment_intent,
amount, currency,
customer_email (if available).
Make the update idempotent (Stripe may retry webhooks).


5) Facebook CAPI
Send Purchase event from n8n using preserved fbclid (and dedupe event_id).
Include required fields for Aggregated Events Measurement (currency/amount, timestamp, etc.).
Hash PII as required by Meta (if used).
Ensure deduplication if pixel also fires on the thank-you page.


6) Fulfillment Workflow (New n8n Flow)
Trigger: when a sheet row changes to paid (via polling, Sheets trigger, or emitted event in flow).
Compose prompt (from quiz answers) and send to a placeholder “tool” node you create (e.g., HTTP endpoint, OpenAI node, or queue)—I’ll plug the real tool later.


Email: send a confirmation email to the customer (via SMTP or Gmail node I provide credentials for).

Write-back: add columns like fulfillment_status, fulfillment_link (if any), emailed_at.




Deliverables
Working n8n workflows:


Quiz Intake → Sheets → Create Checkout Session → Redirect
Stripe Webhook → Sheets Update (status=paid)
Fulfillment Trigger (on paid) → Prompt builder → Email → Sheet write-back
Facebook CAPI Purchase event firing with fbclid and dedupe.
Google Sheet structured with the columns above and live updates.
Minimal bridge endpoint/page if needed to support dynamic redirect.
README + brief loom video walkthrough.



Acceptance Criteria
New submissions show as pending in the sheet with quiz_id and answers.
After a successful Checkout, Stripe webhook updates the exact row to paid with correct amounts/IDs.
A test purchase emits a Facebook CAPI Purchase that dedupes with pixel (we’ll verify in Events Manager).
A paid row automatically kicks off fulfillment: prompt composed, confirmation email sent, and fulfillment fields written back.
Idempotent: re-delivered webhooks do not create duplicates or flip statuses incorrectly.


Requirements
Proven Stripe Checkout (Sessions, metadata, webhooks) experience.
Strong n8n skills (Sheets, HTTP, Data Store, SMTP/Gmail).
JavaScript/webhook fluency and OAuth familiarity.
Facebook CAPI + fbclid preservation experience.

Access I’ll Provide
n8n (self-hosted) credentials
Stripe API keys + webhook secret
Google Sheet + service account or OAuth
Email sender (SMTP or Gmail API)
Facebook Pixel/CAPI token and Test Code



To Apply (please include)
2–3 examples of Stripe + webhook integrations you built (links or brief descriptions).
How you’ve preserved fbclid and implemented CAPI dedupe before.
Your proposed approach to the ID join and dynamic Checkout Session creation (a few bullet points).
Fixed price quote and timeline.


Any assumptions or access you’ll need.


Notes from our current payloads (for context)
Quiz webhook includes body.code (our ideal join key).
Current Stripe events show client_reference_id: "unknown_code" (because we used a static Payment Link). Your task includes switching to API-created Checkout Sessions so client_reference_id/metadata carry our code.

  • $75.00

    Fixed-price
  • Intermediate
    Experience Level
  • Remote Job
  • Ongoing project
    Project Type
Skills and Expertise
Mandatory skills
Stripe
Web Development
Activity on this job
  • Proposals:Less than 5
  • Last viewed by client:3 weeks ago
  • Hires:
    1
  • Interviewing:
    2
  • Invites sent:
    3
  • Unanswered invites:
    1
About the client
Member since Mar 5, 2025
  • Paraguay
    Asuncion1:51 PM
  • $400 total spent
    1 hire, 1 active

Explore similar jobs on Upwork

Comprehensive NEO Bank Web Platform DevelopmentFixed-price‐ Posted 1 month ago
Web Development
AWS Lambda
Website Security
Database Management
Database Development
Next.js
Software Development
Compliance
WordPress
WooCommerce
Elementor
Web Development

How it works

  • Post a job icon
    Create your free profile
    Highlight your skills and experience, show your portfolio, and set your ideal pay rate.
  • Talent comes to you icon
    Work the way you want
    Apply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
  • Payment simplified icon
    Get paid securely
    From contract to payment, we help you work safely and get paid securely.
Want to get started? Create a profile

About Upwork

  • Rating is 4.9 out of 5.
    4.9/5
    (Average rating of clients by professionals)
  • G2 2021
    #1 freelance platform
  • 49,000+
    Signed contract every week
  • $2.3B
    Freelancers earned on Upwork in 2020

Find the best freelance jobs

Growing your career is as easy as creating a free profile and finding work like this that fits your skills.

Trusted by

  • Microsoft Logo
  • Airbnb Logo
  • Bissell Logo
  • GoDaddy Logo