fb-pixel Send leads into Revamp365 from Zapier, Make, Carrot, or custom forms | Help Center - Revamp365.ai
Skip to main content
Revamp365.ai

Contacts CRM

Send leads into Revamp365 from Zapier, Make, Carrot, or custom forms

9 min read · 28 views

Inbound docs match the in-app guide. For screenshots, troubleshooting tables, FAQ, field reference, limits, HMAC verification, duplicate handling — this article mirrors the wizard under Integrations & Apps → Webhooks → Inbound Docs (Beta). Bookmark either version.

Quick start

Revamp365 can accept leads from any tool that can POST JSON — Zapier, Make.com, Carrot sites, Jotform, raw HTML forms, custom scripts, you name it. You create an Inbound Lead Source once per tool, copy its webhook URL, and paste that URL into the sender. Every matching lead becomes a Contact automatically.

  1. Go to Integrations & Apps → Webhooks → Inbound Leads.
  2. Click New source, give it a name (e.g. Carrot forms), and save.
  3. Copy the webhook URL shown on the Done step.
  4. Paste that URL into your tool's webhook or HTTP-POST action.
  5. Submit a real lead and confirm it appears under Inbound Logs.

Carrot integration

Carrot is the highest-priority integration for most PPC agencies. The shape of a Carrot form submission maps directly onto Revamp365's canonical payload — no field mapping required.

  1. In your Carrot dashboard, open Settings → Leads → Webhooks.
  2. Add a new webhook. Set URL to the webhook URL from your Inbound Lead Source.
  3. Set Method to POST and Content-Type to application/json.
  4. Save and submit a test lead from your Carrot site. The lead will land in Contacts CRM within seconds.

If your Carrot payload has an unusual nested shape, return to the source's Field Mapping step and paste a sample payload — Revamp will detect the available paths so you can map them.

Zapier integration

Use Zapier when you want to bridge from another system (Facebook Lead Ads, Gravity Forms, a spreadsheet, etc.) into Revamp365.

  1. Create a new Zap. Pick any trigger (e.g. Facebook Lead Ads → New Lead).
  2. Add an action step: Webhooks by Zapier → POST.
  3. Set URL to your Inbound Lead Source URL.
  4. Set Payload Type to JSON.
  5. Map the trigger's fields onto keys like first_name, last_name, email, phone, address, city, state, zip, tags, notes.
  6. Turn the Zap on. New leads will flow into Revamp within a minute of the source firing.
Only have a single "name" field? Map it to a key called full_name instead of first_name (Podio's Title, a Carrot "Full name" field, and similar). Revamp automatically splits it into first and last name on the first space — no Code step needed. name and contact_name behave the same way.

Make.com integration

Make (formerly Integromat) uses the HTTP → Make a request module.

  1. Add the HTTP → Make a request module after your trigger.
  2. Set URL to your Inbound Lead Source URL.
  3. Set Method to POST.
  4. Add a header Content-Type: application/json.
  5. Set Body type to Raw and enter JSON using module output variables for the values.

Custom form or curl

Any HTTP client can post to your webhook URL. Here is a minimal cURL example:

curl -X POST "https://revamp365.ai/api/webhooks/inbound-leads/YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "[email protected]",
    "phone": "5125550100",
    "address": "123 Main St",
    "city": "Austin",
    "state": "TX",
    "zip": "78701",
    "tags": ["hot-lead"],
    "notes": "Submitted via marketing form"
  }'

Successful submissions respond with HTTP 202 and {"success": true, "event_id": 123}. The lead is processed asynchronously on the queue.

Canonical payload reference

Every inbound payload is normalized into this canonical shape before creating or merging a Contact. You do not have to send every field — at minimum you need an email or a phone.

Identity

FieldTypeNotes
emailstringValidated as email; lowercased
phonestringAny format; normalized to E.164
first_name / last_namestringMax 200 chars each
full_name (also name or contact_name)stringUse when the source only has a single combined name field. Revamp splits it on the first space — everything before becomes the first name, everything after the last name (e.g. "Mark Miller"Mark / Miller). Ignored if you already send first_name.

Mailing address (the person's postal address)

FieldTypeNotes
address / city / state / zipstringStored on Contact.mailing_*

Property address (seller leads)

Use these when the form is asking "what house are you selling?" — they map to the CRM's Most Recent Property (MRP) columns on the Contact, not the mailing address.

FieldTypeNotes
property_addressstringSubject-property street
property_city / property_state / property_zipstringPopulates mrp_city / mrp_state / mrp_zip

Lead lifecycle

FieldTypeNotes
lead_sourcestringFalls back to the source's default
lead_statusstringPreserved on existing contacts; new contacts default to NEW
lead_temperaturestringe.g. Hot / Warm / Cool / Cold
lead_manager_emailstringMatches a Revamp user by email and auto-assigns as lead manager

Classification & lists (unioned on merge)

Each accepts an array or a comma-separated string. Values are merged into whatever is already on the contact — nothing is overwritten.

FieldTypeNotes
contact_typearray / stringe.g. lead, buyer, seller (lead is auto-added)
deal_typearray / stringe.g. wholesale, flip, rental
price_rangearray / string
countiesarray / string
listsarray / string
tagsarray / stringUnioned with source default tags

Provenance & extras

FieldTypeNotes
external_idstringCRM id from the sender; used for dedup alongside phone/email
notesstringSaved as a timeline note on the contact (never overwritten)
custom_fieldsobjectArbitrary key/value — captured as ContactCustomField

Field mapping deep-dive

If your sender uses different key names or a nested structure, open your Inbound Lead Source and go to the Field Mapping step.

  1. Paste a real sample payload from your tool into the textarea at the top.
  2. Revamp recursively flattens the JSON into dot-paths (e.g. data.lead.email_address, items[0].phone).
  3. For each canonical field on the left, pick a path on the right or switch to Static value to hard-code a value (useful for lead_source: Facebook Ads).
  4. Use Add custom field for anything else you want to capture.
  5. Save and return to the Test step to preview — Revamp will show exactly which Contact would be created or merged, without writing anything.

No mapping = best-effort auto-detect. Zapier's default output shape, Carrot's default form submission shape, and simple {first_name, email, phone} payloads all work with zero configuration.

Map a lead field to a custom CRM field you created

Anything that isn't one of the built-in fields above can still land on the Contact — as a custom field. If you've already created a custom field in your Contacts CRM (e.g. Motivation, Asking Price, Best time to call), you can route an incoming value straight into it.

The one rule that makes it work: the key you send under custom_fields must match the custom field's name exactly — same spelling and capitalization as it appears in your CRM.

Option A — In-app Field Mapping (recommended; works with any sender)

This is the right path for Zapier, where each row in the POST action's Data table is a single flat key — you send a plain key and let Revamp route it to the correct custom field.

  1. Open your Inbound Lead Source and go to the Field Mapping step.
  2. Under Custom fields, click Add custom field.
  3. In the field name box, type the custom field's name exactly as it appears in your CRM (e.g. Motivation).
  4. Leave the toggle on From payload and pick the incoming path that holds the value (e.g. motivation, or a nested path like data.lead.motivation) — or switch to Static value to hard-code one.
  5. Save and use the Test step to confirm the value appears on the previewed Contact.

Option B — Send a custom_fields object directly

If your sender can emit nested JSON (Make.com, a custom script, or cURL), include a custom_fields object whose keys are your CRM field names:

{
  "phone": "5125550100",
  "custom_fields": {
    "Motivation": "Divorce",
    "Asking Price": "250000"
  }
}

Zapier's flat Data rows can't build a nested object on their own, so for Zapier use Option A above.

No matching field yet? If you send a custom_fields key that doesn't match an existing custom field, Revamp auto-creates a new text field with that exact name (up to 50 auto-created fields per account). Handy — but a typo creates a duplicate field, so copy the name carefully.

On merge: like the built-in fields, an existing non-empty custom-field value is never overwritten by a later inbound lead — blanks are filled, real data is preserved.

HMAC security

When your sender supports custom headers, you can require an HMAC-SHA256 signature so nobody else can POST to your URL.

  1. Edit your Inbound Lead Source and go to the Security step.
  2. Click Generate secret (or Rotate) and copy the plaintext secret — it is shown once.
  3. In Zapier's POST action, add a header:
    • Name: X-Revamp-Signature
    • Value: compute hmac_sha256(body, secret) in a Code-by-Zapier step, or use Zapier's built-in webhook signature helper if available.
  4. Requests without a valid signature will be rejected with a generic 404 (to avoid revealing whether the URL exists).

Carrot and most simple webhook senders do not support custom headers — skip HMAC for those and rely on the token in the URL for protection.

Troubleshooting

If a Zap fires successfully but no Contact appears, check the Inbound Logs tab under Webhooks. Every POST Revamp receives is logged there, whether it processed or not. Common situations:

  • Status: ignored, error "Payload has neither a normalizable phone nor email" — your sender isn't including a valid phone or email under the keys Revamp expects. Open Field Mapping and map them explicitly.
  • Status: received and it stays there — your queue worker isn't running inbound-leads. On self-hosted installs, make sure the worker includes that queue name. Contact support if you are not self-hosted.
  • Status: failed — hover the error column for the reason. Click the retry icon after fixing the underlying issue (e.g. adjusting a field mapping).
  • No POST appears at all — the source may be inactive, the token in the URL may be wrong, or HMAC may be misconfigured. Open your sender's own logs and confirm it is hitting the correct URL and getting a 2xx response.

FAQ

Does a matched Contact get overwritten when new data arrives? No. Revamp uses fill-blanks merge logic — only empty columns on the existing Contact are updated. Tags are unioned. Existing lead_source / lead_status are preserved so your own edits are never lost.

How are duplicates detected? Revamp normalizes incoming phones to E.164 and emails to lowercase, then looks for a matching Contact in your account — first by phone, then by email. If one is found, it is merged; otherwise a new Contact is created with lead_status = NEW.

What is the rate limit? 200 requests/minute per source by default. Legitimate senders will never hit this. If you need more, contact support.

Is there a daily cap? You'll get a one-time in-app notification if a single day crosses 10,000 inbound events for your account — that's usually a sign of a broken loop. Nothing is blocked.

Can I delete a source? Yes. Deleting an Inbound Lead Source soft-deletes it for 30 days — the URL stops accepting leads immediately, and any events still queued will be ignored. Contacts already created by that source remain in your CRM.

Was this article helpful?