Jump to…
Connecting HighLevel CRM
If your team already runs on HighLevel, you don't need to abandon it to use BidCraft. Connect the two and BidCraft pushes proposal links, tags, and (optionally) invoices straight into your existing pipeline. Your follow-up workflows keep firing the same way they always have — BidCraft just becomes the front end for building the actual proposal.
What you'll need before you start
Open Settings → Connected Apps in the sidebar and click the HighLevel tile (or open /settings/connected-apps#highlevel directly). To connect, you need two things from your HighLevel sub-account:
- A Private Integration token with the right scopes
- Your Location ID
The token has to include all eight of these scopes — anything less and certain features will fail silently later:
- Contacts: read + write
- Opportunities: read + write
- Products: read + write
- Invoices: read + write
You generate the token inside HighLevel under your sub-account's integrations area. Paste both values into the BidCraft form, then hit the Test Connection button. It verifies your credentials against HighLevel before saving — so you know right then whether the scopes are correct.
[!tip] The token is tied to one sub-account. If you manage multiple HighLevel locations (e.g., two business names), each one gets its own connection in its own BidCraft org. Don't try to share a single token across orgs.
What you'll see once connected
The status badge at the top of the integration page flips from "Disconnected" to "Connected." You can disconnect at any time from the same page — it doesn't delete any historical data, it just stops new pushes from going out.
A few things become available immediately:
- The Send to HighLevel button shows up on every proposal page once HighLevel is connected
- You can browse the Sync log — a filterable record of every action BidCraft has pushed to HighLevel (contact updates, product creation, invoice creation, tag adds)
- The import flow at
/settings/highlevel/importlets you pull your existing GHL products into BidCraft as a starting catalog
Choosing your proposal provider
Once connected, you have a choice: should client-facing proposal emails go out through BidCraft's email system or through your HighLevel workflows?
This setting lives under Settings → Proposal Settings — tap the Delivery card and pick under How proposals get sent to clients (the same card's Where invoices come from picks who creates your invoices). Tap Save to keep your choice.
- BidCraft (default) — proposal emails go out from BidCraft directly, branded with your business name
- HighLevel — BidCraft writes the proposal link to a HighLevel contact custom field and fires a tag; your existing GHL email/SMS workflow takes over from there
If you've already built tight follow-up sequences in HighLevel, the second option keeps everything in one place. If you don't have GHL email automations set up, just leave it on BidCraft.
What syncs to HighLevel regardless of the proposal provider
Whenever HighLevel is connected and the project has at least one contact channel (email or phone), every proposal you send pushes the following into your HighLevel sub-account — independent of which provider sends the actual email:
- Contact — created if it doesn't exist, otherwise reused. BidCraft matches on email first; if the project has only a phone number, BidCraft falls back to matching by phone (digits-only, exact match).
- Custom field — the proposal link is written to the field key you configured
- Note — a "Proposal sent" note with the link and total, attached to the contact
- Opportunity — added to your first pipeline at the first stage, with the proposal total as the monetary value
The workflow-trigger tag Action: send app proposal only fires when the proposal provider is set to HighLevel — that's intentional, otherwise the homeowner would get two messages (one from BidCraft, one from your GHL workflow).
Phone-only contacts
A common pattern: contractor captures a lead with no email, just a phone number. If your GHL workflow has an SMS branch — text the proposal link when no email is on file — BidCraft makes that work end to end. With the proposal provider set to HighLevel, BidCraft pushes the contact by phone, drops the link in your custom field, and fires the Action: send app proposal tag. Your workflow's SMS branch takes it from there.
If your provider is set to BidCraft (native) and there's no email on the project, BidCraft can't send anything itself (BidCraft's own delivery sends email, not texts). When you press Send, the panel that opens warns you about the gap and offers Copy link or Add an email instead, so you'll know before anything goes out.
[!tip] Phone-based dedup is less precise than email — same number can legitimately belong to spouses, business lines, or be reassigned over time. BidCraft only uses the phone path when there's no email on the project. If a contact later gains an email, that becomes the dedup key going forward.
When something breaks
The sync log is your best friend if a push fails. Every row shows the request, the response, and the timestamp — so if HighLevel rejected a product creation or your token expired, you'll see it there.
If the token itself expires or gets rotated in HighLevel, the integration goes red. Just paste the new token, hit Test Connection, and save.
Next steps
Email andy@businessupai.com and a real person on the BidCraft Tile team will get back to you. If you're signed in, you can also ask Biddy from any page in the app.