---
title: "Integrations"
url: https://docs.light-ai.app/integrations.md
canonical_url: https://docs.light-ai.app/integrations
last_updated: 2026-10-13
summary: "Honest paths to the tools contractors use: what connects directly, what needs n8n, Zapier or Make, and what is manual."
api_status: beta
related:
  - https://docs.light-ai.app/inbound
  - https://docs.light-ai.app/webhooks
  - https://docs.light-ai.app/external-refs
  - https://docs.light-ai.app/downloads
---

# 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](https://docs.light-ai.app/downloads) 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](https://docs.light-ai.app/integrations/highlevel) | **Direct** | **Direct** · **via n8n** |
| [HubSpot](https://docs.light-ai.app/integrations/hubspot) | **via n8n** · **via Zapier** | **via n8n** |
| [Jobber](https://docs.light-ai.app/integrations/jobber) | **via Zapier** · **via n8n** | **via Zapier** · **via n8n** |
| [Housecall Pro](https://docs.light-ai.app/integrations/housecall-pro) | **via n8n** | **via n8n** · **via Zapier** |
| [ServiceTitan](https://docs.light-ai.app/integrations/servicetitan) | **via Zapier** | **via Zapier** |
| [Service Autopilot](https://docs.light-ai.app/integrations/service-autopilot) | **E-mail** · **via n8n** | **Their web form** · **via n8n** |
| [RealGreen](https://docs.light-ai.app/integrations/realgreen) | **via n8n** · **Partner or manual** | **via n8n** · **Partner or manual** |
| [Sweep&Go](https://docs.light-ai.app/integrations/sweepandgo) | **Direct** · **via Zapier** | **via n8n** |
| [DeepLawn](https://docs.light-ai.app/integrations/deeplawn) | **via Zapier** | — |
| [Google Ads & LSA](https://docs.light-ai.app/integrations/google-ads) | **Direct** · **via n8n** | **via n8n** |
| [Meta Lead Ads](https://docs.light-ai.app/integrations/meta-ads) | **via n8n** · **via Zapier** · **via Make** | **via n8n** |
| [n8n](https://docs.light-ai.app/integrations/n8n) | **Direct** | **Direct** |
| [Zapier](https://docs.light-ai.app/integrations/zapier) | **Direct** | **Direct** |
| [Make](https://docs.light-ai.app/integrations/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_system` on writes and skip events whose `origin.source_system` is yours, to avoid loops.
- Use an `Idempotency-Key` on every write.
- Put `message`, form answers (`lead.form_answers`, see [Website request forms](https://docs.light-ai.app/forms)) and `project.app_url` in a CRM note or custom fields.
- 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.

## 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.
