innkept

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

  1. Guest submits the configurator. Lead and quote are created.
  2. The PushLeadToDestinations job is dispatched to the queue.
  3. The job loads every active integration on your company.
  4. For each one, it builds the payload, applies field mapping, calls the destination.
  5. On success: last_pushed_at updates and the response is logged.
  6. 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

PlanConnectors included
Free0 (email notifications only)
Starter1
ProUnlimited
MultiUnlimited

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.