Integrations
Integrations
Honest paths to the tools contractors use: what connects directly, what needs n8n, Zapier or Make, and what is manual.
Light AI has no native connectors yet. Direct means no middleware (the tool posts to Light AI or receives its webhooks). via n8n / Zapier / Make means a small workflow does the mapping; templates are provided for n8n. Their web form means n8n submits the tool's own lead form. Each recipe lists the vendor documentation it is based on, including plan or approval requirements.
| Tool | Leads in | Outcomes out |
|---|---|---|
| HighLevel | Direct | Direct · via n8n |
| HubSpot | via n8n · via Zapier | via n8n |
| Jobber | via Zapier · via n8n | via Zapier · via n8n |
| Housecall Pro | via n8n | via n8n · via Zapier |
| ServiceTitan | via Zapier | via Zapier |
| Service Autopilot | E-mail · via n8n | Their web form · via n8n |
| RealGreen | via n8n · Partner or manual | via n8n · Partner or manual |
| Sweep&Go | Direct · via Zapier | via n8n |
| DeepLawn | via Zapier | — |
| Google Ads & LSA | Direct · via n8n | via n8n |
| Meta Lead Ads | via n8n · via Zapier · via Make | via n8n |
| n8n | Direct | Direct |
| Zapier | Direct | Direct |
| Make | Direct | Direct |
Rules for every recipe#
- Key CRM records on
project.id, not on the quote id (each revision is a new quote). - Write your record id back with
PUT …/external_refs/{system}; look objects up with?external_ref=system:id. - Send
source_systemon writes and skip events whoseorigin.source_systemis yours, to avoid loops. - Use an
Idempotency-Keyon every write. - Put
message, form answers (lead.form_answers, see Website request forms) andproject.app_urlin a CRM note or custom fields. - Photos and instant previews: webhook payloads carry only asset ids (
assets.photos[],assets.mockups[]withurl: null). FetchGET /v1/leads/{id}for links that expire after 60 minutes and download the files if the CRM can store them; otherwise storeproject.app_url(sign-in required). Never save a 60-minute link in a CRM.
Canonical quote mapping#
| CRM field | Light AI |
|---|---|
| Deal / job key | project.id (stable across quote revisions); write your id back with PUT /v1/projects/{id}/external_refs/{system} |
| Amount | totals.total.decimal (or .cents) |
| Customer | client.first_name, client.last_name, client.email, client.phone |
| Site address | property.address.* |
| Line items | line_items[]: code, name, quantity, unit_price_cents, total_cents |
| Stage | quote.published → proposal sent; quote.approved → won; quote.declined / quote.expired → lost |
| Contractor link | links.app_url (sign-in required, safe to store) |
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.