Step-by-step guide to push Jotform submissions into Pipedrive with idempotent upserts, field mapping, and error handling using Make.com.
Introduction
You get Jotform responses and someone manually copies the data into Pipedrive, or you rely on a one-off export and wrestle with duplicates. That costs time and creates delayed follow-up. A predictable webhook-to-CRM pipeline prevents duplicate persons, preserves source attribution, and surfaces failed runs to an ops channel.
This guide shows you how to push Jotform submissions into Pipedrive using Make.com. By the end you will have an idempotent find-then-upsert pattern, field mappings for common contact fields, a lightweight audit log in Google Sheets, and Slack alerts for failures.
What you will know by the end: the Make.com modules to use, exact field mapping recommendations, idempotency and retry patterns, and common gotchas to avoid in production.
What You'll Need
- Jotform account with the form you want to use and webhooks enabled (recommended).
- Pipedrive account with API access (API token or OAuth) and a custom field to store an external id if you want stronger dedupe.
- Make.com account to host the scenario (paid tier recommended for error handlers and higher execution volumes).
- Google Sheets for an audit log and idempotency records (optional but recommended).
- Slack workspace and a bot for ops alerts (optional).
Permissions and notes:
- Jotform webhooks require a public HTTPS endpoint. Use Make.com’s webhook module to receive submissions.
- Pipedrive custom fields require exact field keys in mapping. Create a custom person field like
external_submission_idif you want to store Jotform submission ids.
How It Works (The Logic)
Trigger: Jotform webhook sends the submission to Make.com. Make.com normalises the payload and checks a dedupe layer (Google Sheets or Make Data Store) using Jotform's submission_id or email. Make.com searches Pipedrive for an existing Person by email or external id. If found, it updates the Person. If not, it creates a new Person and optionally creates/associates an Organization and a Deal. The scenario writes a row to Google Sheets with run status and sends Slack alerts on failures or high-priority leads.
In plain terms: Jotform webhook → Make.com normalise & dedupe → Pipedrive find by email/external_id → update or create → log and notify.
Step-by-Step Setup
- Prepare the Jotform form and webhook
- Ensure the form includes a required email field if email will be your primary dedupe key.
- Note the Jotform submission_id included in the webhook payload, you will use it as an idempotency key.
- In the form settings add a webhook URL, which you will get from Make.com when creating the webhook module.
Gotcha: enable a secret header or token if Jotform supports it, and validate that header inside Make.com for simple authentication.
- Create the Make.com Scenario and Webhook
- Module 1: Webhooks > Custom Webhook (Catch Hook). Create a new webhook and copy the URL.
- Paste the URL into Jotform webhook settings and submit a real test response to capture the exact payload shape.
Gotcha: Jotform wraps answers in a predictable JSON object but question IDs can change if the form is edited. Use question names or reference mapping that is stable.
- Normalize payload and build idempotency key
- Module 2: Tools > Set Variable (or similar) to extract and normalise fields:
- email_normalised = lowercase(trim(answers.Email))
- submission_key = submission_id (or form_id + submission_id for absolute uniqueness)
- Trim whitespace and remove obvious formatting noise from phone numbers.
Why: Normalising email prevents trivial duplicates and eases search queries in Pipedrive.
- Idempotency check against Google Sheets (or Make Data Store)
- Module 3: Google Sheets > Search Rows where submission_key equals the incoming id.
- If a row exists with status = succeeded or pending, stop the flow to prevent duplicate processing.
- If no row exists, append a provisional row with status = processing and timestamp, then continue.
Why: Jotform retries and webhook redeliveries are common. Doing this early prevents duplicate persons and duplicate deals.
- Search Pipedrive for an existing Person
- Module 4: HTTP or Pipedrive v2 module: GET /persons/find?term={email_normalised}&search_by=email
- If your organisation stores
external_submission_idin a custom field, search for that too to handle cases where email is missing or changed.
Routing logic:
- If a person is returned, capture person_id and route to the Update branch.
- If not, route to the Create branch.
Gotcha: Pipedrive’s search can return multiple hits for fuzzy matches. Validate the returned email is an exact match or check the external id.
- Update Person path
- Module: Pipedrive > Update Person (PUT /persons/{id}). Map only non-empty fields so you do not overwrite better existing values.
- Typical mappings:
- first_name → mapped first name
- last_name → mapped last name
- email → primary email
- phone → phone array
- custom fields (job title, source, campaign) → Pipedrive custom field keys
Gotcha: omit empty strings. Make.com supports conditional mapping—use it to avoid blanks overwriting values.
- Create Person and Organisation path
- Module A: Pipedrive > Create Person (POST /persons). Provide name, email array, phone array and custom fields including
external_submission_id. - Module B (optional): If company present, search Organization by name, then create or update org and associate it with person_id.
Naming tip: set the person name as "{{first_name}} {{last_name}}" and include company in the org create payload rather than the person name if you need org links.
- Optional Deal creation
- Add a conditional Router: create a Deal only when a qualifying field exists (budget, interest level, or checkbox).
- Module: Pipedrive > Create Deal, set pipeline, stage, value, and link the deal to person_id and org_id.
Gotcha: keep Deal creation conditional to avoid cluttering your pipeline with low-value submissions.
- Append final audit log row and update status
- Module: Google Sheets > Update Row (or Append Row if you used a transient provisional row). Write: submission_key, email, action (created/updated), person_id, org_id, deal_id, run_status = succeeded, timestamp.
- If an error occurred earlier, write run_status = error and include the error message.
Why: this sheet is your ground truth for reprocessing and forensic checks.
- Error handling and Slack alerts
- Configure an Error Handler route in Make.com to catch transient and permanent failures.
- For transient errors (5xx, rate limit), configure up to 3 retries with exponential backoff.
- For failures beyond retries, write the payload and error to a dead-letter sheet and post a concise Slack message to
#ops-integrationswith submission_key and error summary.
Practical alert content: submission_key, email, which step failed, link to the provisional Google Sheet row.
Real-World Business Scenario
A recruitment agency captured candidate referrals and client leads using several Jotform pages. Manual entry into Pipedrive caused duplicates and delayed outreach. After implementing this Jotform → Pipedrive Make.com scenario, each submission created at most one Person, high-intent submissions created deals, and failures landed in a single Google Sheet for manual review. The agency reduced duplicate contacts by 80% and reclaimed time previously spent on reconciliation.
Common Variations
- Use Make Data Store instead of Google Sheets for idempotency when you expect high concurrency or larger volumes.
- Enrich submissions with a company lookup (Clearbit) before creating a Person, then write enrichment fields into Pipedrive custom properties.
- Add a human approval gate: copy the provisional Google Doc to a reviewer Slack channel and only run the create path after an approver clicks an approval webhook.
What this delivers for your team
You built a practical, production-ready pattern that moves Jotform submissions into Pipedrive using Make.com with dedupe, careful field mapping, auditing, and failure alerts. For mapping ideas and CRM upsert patterns, see our guide on connecting Typeform to HubSpot for similar upsert logic in Make.com, and our Pipedrive-focused walkthrough on upserting Typeform submissions in Make.com. If you want this implemented and hardened for your business, Olmec Dynamics builds and maintains these exact automations. Learn more about our work at Olmec Dynamics.