innkept

HubSpot

Push leads as Contacts with lifecyclestage = lead. OAuth or private app token.

Pushes leads as Contacts in HubSpot, with lifecyclestage = lead, plus a Note on the contact's timeline carrying the event details and the proposal link — your sales team can jump straight to it.

Connecting

Recommended — OAuth: open Integrations → New integration → HubSpot and click Connect HubSpot. You'll log into your own HubSpot portal and approve access (contacts + notes); tokens are stored encrypted and refresh automatically, and you can revoke access from HubSpot at any time.

Manual fallback — Private App token (also your own account):

  1. In HubSpot, create a Private App from Settings → Integrations → Private apps.
  2. Give it scopes: crm.objects.contacts.read, crm.objects.contacts.write, and crm.objects.notes.write (for the timeline note — without it, the contact still pushes and the note is skipped).
  3. Copy the access token (it starts with pat-…) and paste it into the integration form.

Either way, credentials are encrypted at rest and belong to your account — Innkept never routes your leads through a shared CRM login.

What gets pushed

HubSpot propertyFrom
emailLead email
firstname / lastnameLead name (split on first space)
phoneLead phone (if provided)
lifecyclestagelead
Timeline noteEvent type + date, guest count, quote total, proposal URL

Additional event details (date, guest count, proposal URL) are appended as custom properties if you've created them in HubSpot. You can map them via the integration's Field mapping field — see How push works.

Deduplication

We push with HubSpot's upsert API keyed on email: if the lead's email already exists in your portal, that contact is updated in place (and gets a fresh timeline note); otherwise a new contact is created. A returning enquirer never produces a duplicate — and never a failed push.

Pipeline stage

We don't push pipeline stage. HubSpot lifecycle stages and Innkept lead statuses don't align cleanly — and your sales team's workflow probably uses a custom pipeline that we can't predict. If you want pipeline assignment, set up a HubSpot workflow on Contact created with lifecyclestage = lead as the trigger.

Suggested HubSpot properties to create

These don't exist by default in HubSpot. Create them as Single-line text or Number properties on the Contact object:

  • innkept_event_date — date
  • innkept_event_type — single-line text (wedding, corporate, etc.)
  • innkept_guest_count — number
  • innkept_proposal_url — single-line text
  • innkept_quote_total — number

Then map them in the integration's field mapping. Once mapped, the next lead push populates them.

Errors you might see

ErrorCauseFix
401 UnauthorisedToken revoked or expiredRegenerate the token in HubSpot, paste again.
403 ForbiddenToken missing required scopeEdit the Private App in HubSpot, add crm.objects.contacts.write.
429 Too many requestsHubSpot rate limit hitSelf-heals — Innkept retries with backoff.

Something missing or wrong? Tell us.

Updated regularly. UK English. No AI slop.