Realtime sync between Sheet ↔ HubSpot (missing Record IDs + auto-create companies)

EvieSchellens
Participant

We have an ICP company list in a Google Sheet that we want to keep in real-time sync with HubSpot, both ways.

 

Current setup / what works

  • We use Coefficient to sync.

  • For companies that are already marked as ICP in HubSpot, it works well:

    • We did a one-time export from HubSpot → Sheet to get the HubSpot Company Record ID into the sheet.

    • With that Record ID present, we can continuously update fields from Sheet → HubSpot.

    • Updates from Hubspot → Sheets are done with the native Sheets integration via workflows. 

     

The problem

In the sheet, an automation can change a company’s status so that it becomes an ICP based on certain conditions. These “new ICPs” create two issues, because the sheet does not have the HubSpot Record ID yet (that is needed to sync).

 

Questions

  1. Company exists in HubSpot, but the sheet doesn’t have its Record ID yet

    How should we (automatically) update this company from Sheet → HubSpot if we only have the domain name but not the Record ID? 

     

  2. Company does not exist in HubSpot, but does exist in the sheet

    How can we ensure that if a company is not found in HubSpot (based on domain), it is automatically created as a new company record in HubSpot?

Does anyone have experience with this setup, or recommendations for tools, workflows, or best practices to solve this?


Thanks in advance!

2 Accepted solutions
Brenner
Solution
Recognized Expert | Platinum Partner
Recognized Expert | Platinum Partner

Hello @EvieSchellens ! 

 

This is a very common scenario when Google Sheets becomes a decision layer (ICP logic) while HubSpot remains the system of record. The key point here is: without the Company Record ID, there is no reliable bidirectional sync in HubSpot.

 

Therefore, the architecture must guarantee matching, enrichment, and automatic ID creation.

 

The Recommended approach: Domain-based upsert (match + enrich)

In HubSpot, the domain is the best natural identifier for a Company (not perfect, but it is the market standard).

 

I recommend you use API:

 

Use the Search Companies endpoint:

The Sheet automation sends:

  • domain

The HubSpot API:

  • searches for the company by domain

  • if found:

    • returns the companyId

    • writes that ID back to the Sheet

    • from that point on, the sync becomes ID-based

Important to know: 

  • Never update a Company without an ID after the first successful match

  • Normalize the domain in the Sheet (lowercase, no http/https/www)

  • Do not rely only on the company name

  • Do not create companies without searching first

  • In Brazil, for example, each company has a unique identifier called CNPJ (Cadastro Nacional de Pessoa Jurídica). If your country has a similar unique business identifier, you can use it as a safe matching key between HubSpot and Google Sheets.

Hope It's helps! 



Brenner Natal



HubSpot Consultant | Inbound Marketer



--------------------------------------------------


Se a minha resposta te ajudou, por gentileza, clique no botão: " Aceitar como solução ".
Ainda com dúvidas? Responda a minha postagem para que possamos continuar te ajudando!
Obrigado por postar na comunidade da HubSpot! .



View solution in original post

RubenBurdin
Solution
Top Contributor

Hey @EvieSchellens 

This is a super common challenge and Brenner is right that the Record ID is the critical piece. Without it, you're stuck building custom matching logic.

To answer your specific questions:

Company exists in HubSpot but Sheet doesnt have the ID:
You need to do a lookup by domain before updating. The HubSpot Search API (POST /crm/v3/objects/companies/search) lets you filter by domain property. Your flow would be: Sheet triggers update → search HubSpot by domain → if found, grab the ID and write it back to the Sheet → then push updates using that ID going forward. Coefficient cant do this natively, you'd need Zapier/Make/n8n or a custom script to handle the search step.

 

Company doesnt exist in HubSpot:
Same search first approach, but if the search returns nothing, you create the company via API (POST /crm/v3/objects/companies) and then write the new ID back to your Sheet.

 

The tricky part is doing this reliably at scale. You need to handle:

  • Domain normalization (strip www, http, trailing slashes)
  • Rate limits on the search API
  • Race conditions if multiple rows update simultaneously
  • Error handling when creates fail

This is exactly the kind of integration plumbing that eats up engineering time. At Stacksync we handle this pattern constantly, bidirectional sync between databases (or sheets via connected DB) and HubSpot with automatic record matching and creation. The domain based upsert logic, ID mapping, and conflict resolution all happen automatically without building custom Zapier flows or scripts.

If you want to stick with the current approach, Make.com probably gives you the most flexibility for the search > match > create/update flow. But if you're finding the maintenance overhead is growing, might be worth looking at a dedicated sync layer. Transparency note: This response is grounded in my own experience and was lightly polished using AI.

 

Good luck!

Did my answer help? Please mark it as a solution to help others find it too.

Ruben Burdin Ruben Burdin
HubSpot Advisor
Founder @ Stacksync
Real-Time Data Sync between any CRM and Database
Stacksync Banner

View solution in original post

4 Replies 4
RubenBurdin
Solution
Top Contributor

Hey @EvieSchellens 

This is a super common challenge and Brenner is right that the Record ID is the critical piece. Without it, you're stuck building custom matching logic.

To answer your specific questions:

Company exists in HubSpot but Sheet doesnt have the ID:
You need to do a lookup by domain before updating. The HubSpot Search API (POST /crm/v3/objects/companies/search) lets you filter by domain property. Your flow would be: Sheet triggers update → search HubSpot by domain → if found, grab the ID and write it back to the Sheet → then push updates using that ID going forward. Coefficient cant do this natively, you'd need Zapier/Make/n8n or a custom script to handle the search step.

 

Company doesnt exist in HubSpot:
Same search first approach, but if the search returns nothing, you create the company via API (POST /crm/v3/objects/companies) and then write the new ID back to your Sheet.

 

The tricky part is doing this reliably at scale. You need to handle:

  • Domain normalization (strip www, http, trailing slashes)
  • Rate limits on the search API
  • Race conditions if multiple rows update simultaneously
  • Error handling when creates fail

This is exactly the kind of integration plumbing that eats up engineering time. At Stacksync we handle this pattern constantly, bidirectional sync between databases (or sheets via connected DB) and HubSpot with automatic record matching and creation. The domain based upsert logic, ID mapping, and conflict resolution all happen automatically without building custom Zapier flows or scripts.

If you want to stick with the current approach, Make.com probably gives you the most flexibility for the search > match > create/update flow. But if you're finding the maintenance overhead is growing, might be worth looking at a dedicated sync layer. Transparency note: This response is grounded in my own experience and was lightly polished using AI.

 

Good luck!

Did my answer help? Please mark it as a solution to help others find it too.

Ruben Burdin Ruben Burdin
HubSpot Advisor
Founder @ Stacksync
Real-Time Data Sync between any CRM and Database
Stacksync Banner
Brenner
Solution
Recognized Expert | Platinum Partner
Recognized Expert | Platinum Partner

Hello @EvieSchellens ! 

 

This is a very common scenario when Google Sheets becomes a decision layer (ICP logic) while HubSpot remains the system of record. The key point here is: without the Company Record ID, there is no reliable bidirectional sync in HubSpot.

 

Therefore, the architecture must guarantee matching, enrichment, and automatic ID creation.

 

The Recommended approach: Domain-based upsert (match + enrich)

In HubSpot, the domain is the best natural identifier for a Company (not perfect, but it is the market standard).

 

I recommend you use API:

 

Use the Search Companies endpoint:

The Sheet automation sends:

  • domain

The HubSpot API:

  • searches for the company by domain

  • if found:

    • returns the companyId

    • writes that ID back to the Sheet

    • from that point on, the sync becomes ID-based

Important to know: 

  • Never update a Company without an ID after the first successful match

  • Normalize the domain in the Sheet (lowercase, no http/https/www)

  • Do not rely only on the company name

  • Do not create companies without searching first

  • In Brazil, for example, each company has a unique identifier called CNPJ (Cadastro Nacional de Pessoa Jurídica). If your country has a similar unique business identifier, you can use it as a safe matching key between HubSpot and Google Sheets.

Hope It's helps! 



Brenner Natal



HubSpot Consultant | Inbound Marketer



--------------------------------------------------


Se a minha resposta te ajudou, por gentileza, clique no botão: " Aceitar como solução ".
Ainda com dúvidas? Responda a minha postagem para que possamos continuar te ajudando!
Obrigado por postar na comunidade da HubSpot! .



EvieSchellens
Participant

Hi Brenner, 

Thank you very much for your detailed explanation. So if I understand correctly, this can’t be done with the native Coefficient → HubSpot integration, and you need to use the API for this. 

Can this be handled entirely within HubSpot, or would you need to use tooling like Zapier, for example?

Brenner
Recognized Expert | Platinum Partner
Recognized Expert | Platinum Partner

Hello @EvieSchellens 

 

I’m not entirely familiar with Coefficient, but you can try to match the records using a domain or a unique ID.

 

If you can’t do this using Coefficient, you can use n8n, Zapier, Make, or create a private app to sync data via the API. Then, you can easily control which information is synced between HubSpot and Sheets.

 

 



Brenner Natal



HubSpot Consultant | Inbound Marketer



--------------------------------------------------


Se a minha resposta te ajudou, por gentileza, clique no botão: " Aceitar como solução ".
Ainda com dúvidas? Responda a minha postagem para que possamos continuar te ajudando!
Obrigado por postar na comunidade da HubSpot! .