Light AIDocs Beta Open Light AI

Integrations

HubSpot

Contacts, notes and deals from Light AI leads and quotes through n8n and HubSpot's CRM API, which works on every HubSpot tier, Free included.

DirectionPathHow
Leads → Light AIvia n8n · via ZapierA HubSpot trigger (form submission or new contact) in Zapier, or n8n's HubSpot Trigger (needs a HubSpot developer app) → POST /v1/leads with source: hubspot and external_ref: { system: "hubspot", id: <contact id> }. A workflow Send a webhook action also works but needs Data Hub Professional or Enterprise.
Light AI → HubSpotvia n8nContact (and a note) on lead.created; deal on quote.published keyed on project.id; closed-won on quote.approved; closed-lost on quote.declined / quote.expired. The template creates a closed-won deal on approval.

Lead → contact and note#

HubSpotLight AI
firstname, lastname, email, phonecontact.first_name, contact.last_name, contact.email, contact.phone
address, city, state, zip, countryaddress.line1, address.city, address.region, address.postal_code, address.country
A custom property (e.g. light_ai_source)source, source_detail (HubSpot sets its own original-source fields)
Note (hs_note_body) on the contactmessage, service_interest, form answers (lead.form_answers, see Website request forms) and project.app_url

Quote → deal#

HubSpotLight AI
dealnameCustomer name and site address
amounttotals.total.decimal
pipeline, dealstagedefault; closedwon / closedlost (custom pipelines have their own stage ids)
closedateapproved_at or declined_at
Line items: name, quantity, priceline_items[]: name, quantity, unit_price_cents / 100
descriptionlinks.app_url

Notes#

  • Credential: a legacy private app token or a service key (public beta since February 2026; REST calls only, no webhooks). Both are Bearer tokens for n8n's HubSpot App Token credential. Scopes: crm.objects.contacts.write, crm.objects.deals.write, plus crm.objects.line_items.write for line items.
  • Write the deal id back on the project so later events update the same deal.
  • unit_price_cents is null for lines priced as a whole (e.g. mini lights by the set): send quantity 1 and total_cents instead.
  • Photos and instant previews: webhook payloads carry only asset ids (assets.photos[], assets.mockups[] with url: null). Fetch GET /v1/leads/{id} for links that expire after 60 minutes and download the files if the CRM can store them; otherwise store project.app_url (sign-in required). Never save a 60-minute link in a CRM.

Download#

Sources#