How push works
Field mapping, retries, isolation. The boring stuff that has to work.
Every active integration receives every new lead. The push happens in a queued background job, isolated per destination — if HubSpot is down, your webhook still delivers. The canonical payload is the same shape across every connector, only the field mapping differs.
The pipeline
- Guest submits the configurator. Lead and quote are created.
- The
PushLeadToDestinationsjob is dispatched to the queue. - The job loads every active integration on your company.
- For each one, it builds the payload, applies field mapping, calls the destination.
- On success: last_pushed_at updates and the response is logged.
- On failure: the error message is stored on the integration (truncated to 500 chars), failure_count increments, and a warning is logged.
Isolation
Each push is wrapped in its own try/catch. A failure in one integration does not stop the others. This is deliberate — you don't want a flaky webhook to also break your HubSpot sync.
Retries
The job inherits Laravel's queue retry behaviour: a failed integration push retries up to 3 times with exponential backoff. After that, the integration shows a red error badge in the dashboard. Failures don't block subsequent leads — every new lead gets a fresh attempt.
Field mapping
Every integration has an optional field mapping — a JSON object that maps Innkept's canonical field names to whatever your CRM calls them. Most operators don't need to touch this; the connectors come with sensible defaults.
Example for HubSpot:
{
"lead.event_date": "wedding_date_property",
"lead.guest_count": "expected_attendees"
}
Plan limits on connectors
| Plan | Connectors included |
|---|---|
| Free | 0 (email notifications only) |
| Starter | 1 |
| Pro | Unlimited |
| Multi | Unlimited |
Supported destinations
- HubSpot — Contact upsert + timeline note
- Pipedrive — Person upsert + Deal at quote value
- Salesforce — Leads, OAuth, deduped by email
- Airtable — one record per lead in your base
- Mailchimp — audience upsert, consent-aware
- Webhook — your own endpoint, signed
- Zapier — built on the webhook destination
- Make & n8n — webhook recipes
- Email — plain-text new-lead summary
Inspecting pushes
Every integration card in the dashboard shows:
- Last pushed at — relative timestamp
- Failure count — total failed attempts since last reset
- Last error — the most recent error message, if any
Click into the card for the push history table — the last 50 attempts with status, response code, and error.
Something missing or wrong? Tell us.
Updated regularly. UK English. No AI slop.