# Create a CompanyCam jobsite when a HubSpot deal closes

> The moment a deal is marked Closed Won, we set up the matching jobsite in CompanyCam, label it by job type, and link it back on the HubSpot deal.

- Workflow type: agent
- Services: CompanyCam, HubSpot, Slack
- Categories: Sales, Operations
- Published: 2026-08-14

## What it does

- Watches your sales pipeline and reacts the moment a deal is marked Closed Won, with no one having to remember to set the job up.
- Checks CompanyCam first and matches messy addresses loosely, so you never end up with two jobsites for the same house.
- Creates the jobsite with the customer name and full street address, then labels it by job type so it lands in the right filter for the field crew.
- Puts the jobsite link back on the deal and logs a note, then tells your operations channel the site is ready to document.

## What you'll need

- A HubSpot account where deals move through a Closed Won stage
- A CompanyCam account on a Pro, Premium, or Elite plan, plus an admin login (CompanyCam only allows outside connections on those plans)
- A Slack workspace with a channel your operations or scheduling team watches
- Deals that record the job address and job type, either on the deal itself or on the homeowner's contact record
- A place on the deal to store the jobsite link, such as a custom field your team already uses

## Prompt

When a deal is marked Closed Won in HubSpot, I want a matching jobsite project created in CompanyCam automatically, so the crew never has to set one up by hand and job photos never land in the wrong place. Trigger this from a HubSpot webhook that fires when a deal's stage changes, and only continue when the new stage is Closed Won. Ignore every other property change.

Start by calling Get Deal with the deal ID from the webhook payload, requesting the deal properties along with its associated contacts. Then call Get Contact for the associated homeowner. Between the two records, collect the customer name, the full street address, and the job type, for example Roofing, Siding, or Insurance Claim. If the deal carries its own address or job type properties, prefer those over what is on the contact.

Before creating anything, call List Projects in CompanyCam and check whether a project for that address already exists. Match addresses loosely rather than exactly, because CRM addresses are messy: treat "123 Main St" and "123 Main Street Unit B" as the same jobsite, and ignore differences in casing, punctuation, and abbreviations like St and Street, Ave and Avenue, or Rd and Road. If you find a convincing match, do not create a second project. Reuse the existing one for the remaining steps and mention in the Slack message that the jobsite already existed.

If nothing matches, call Create Project. Name the project with the customer name and street address. Create Project expects a structured address, so split the HubSpot address into separate street, city, state, and postal code fields rather than passing one combined string. If the city, state, or postal code is missing in HubSpot, fill in what you have and still create the project rather than failing outright.

Then call Add Labels to Project to tag the project based on the job type on the deal, using labels such as Roofing, Siding, or Insurance Claim, so the project lands in the right filter for the field crew. If the job type does not map cleanly onto one of those labels, pick the closest match and call out the ambiguity in the Slack message. If there is no job type at all, skip labeling rather than guessing.

Write the new CompanyCam project link back onto the HubSpot deal with Update Deal, storing it in the deal property the team uses for the jobsite link. Then call Create Note, associated with that deal, recording that the jobsite was created along with the project name, address, any labels applied, and the link, so the sales rep can jump straight from the CRM record to the jobsite photos.

Finish by sending a Slack message to the operations channel with the customer name, street address, job type, labels applied, and the project link, so whoever handles scheduling knows the site is ready to document. Keep it to a few lines and put the link on its own line so it is easy to tap from a phone in the field.

One guardrail: if the deal has no usable street address, do not create a project at all. Post a Slack message naming the deal, with a link to it, so someone can fix the record, then stop. Never create a jobsite that would later have to be merged or deleted.

## How to customize

- Change the job type to label mapping so it matches the labels your crews already filter by, such as Roofing, Siding, Gutters, or Insurance Claim
- Point the notification at a different Slack channel, or split it so each crew gets only their own jobs
- Loosen or tighten how closely addresses have to match before an existing jobsite counts as a duplicate
- Trigger on a different pipeline stage, such as Contract Signed, if your crews mobilize before the deal is formally closed

## FAQ

### What happens if the jobsite already exists in CompanyCam?

Nothing gets duplicated. Before creating anything, we look through your existing projects for one at the same address. If we find a match, we reuse it, still link it back on the deal, and say so in the Slack message so the team knows the site was already set up.

### Our addresses are entered inconsistently. Will it still match?

Yes, that is exactly why this runs as an agent rather than a rigid rule. It treats "123 Main St" and "123 Main Street Unit B" as the same jobsite and ignores differences in casing, punctuation, and abbreviations like St versus Street. When a match is genuinely unclear it errs toward flagging it for a human instead of creating a duplicate.

### Do we need a paid CompanyCam plan for this?

Yes. CompanyCam only allows outside tools to connect on its Pro, Premium, and Elite plans, and the person connecting the account needs to be an admin. If you are on a lower plan you would need to upgrade before this can create projects for you.

### Will this work on HubSpot Free?

Free and Starter accounts have limited support for the automatic notifications that let us react the instant a deal closes. If your plan does not include them, this can run on a schedule instead, checking every 15 minutes for deals that recently moved to Closed Won. The rest of the workflow is identical.

### What if a deal is missing the address or job type?

If the job type is missing we still create the jobsite and simply skip the labels. If the street address is missing we deliberately do not create anything, because a jobsite with no address is worse than none. Instead we post a Slack message pointing at the deal so someone can correct the record.

Use this prompt in General Input: https://www.generalinput.com/prompts/create-a-companycam-jobsite-when-a-hubspot-deal-closes