Customer story

Bad data costs real money. Here is the HubSpot to Supabase workflow that fixed it.

This week I worked with a customer on a data quality problem and recorded a short demo of the general case. Contacts come out of HubSpot, get cleaned and deduplicated, and only the rows that pass land in Supabase.

By Maria Soria, Customer Success Manager

HubSpot to Supabase workflow · interactive demo, 6 min 27 sOpen in Supademo (opens in new tab)

The problem the customer brought us

Their sales team lives in HubSpot. Their product and reporting live on a Supabase database. A nightly job copied contacts from one to the other, and it copied everything: the same person three times under three spellings of their email, trailing spaces in names, companies typed in four different ways, and records with no usable email at all.

None of that looks dramatic in a CRM. It looks dramatic in the results. Duplicate contacts get counted twice in pipeline reports, two reps reach out to the same person in the same week, and the product team builds features for a customer base that is smaller and cleaner than the one the numbers describe. Bad data does not stay in the database. It shows up in decisions.

What the demo shows

The recording is a walk through the general case, not the customer's data. It uses the Spanish version of the Neblex workspace, which is the language the customer works in; every screen in Neblex Integration Fabric is available in the language your team uses.

  1. 1Pull the contacts from HubSpot. The HubSpot connector reads contacts with the properties the customer cares about. The flow can run on a schedule or start when a contact changes.
  2. 2Clean the rows. Emails are lower-cased and trimmed, names lose their stray spaces, and company names are normalized so "Acme", "ACME Inc" and "acme, inc." stop being three companies.
  3. 3Remove duplicates. The Remove duplicates step matches records on the normalized email and drops the repeats. It can also keep every record and tag each one as unique or duplicate, with a pointer to the match, so a review branch can look at the borderline cases.
  4. 4Check quality before writing. The Assert data quality step checks the batch against the rules the customer chose, such as required fields and a valid email. If a rule fails, the run stops with the exact record and rule named, so nothing questionable reaches the database and someone can fix the source in HubSpot instead of quietly inheriting the problem downstream.
  5. 5Insert into Supabase. Only the rows that passed are written to the Supabase table, with the run recorded end to end.

That last point is the one the customer cared about most. Every run shows what came in, what was changed, what stopped the run and why, and what was written. If a number looks wrong in a report, the answer is in the run log, not in a guess.

Why we clean at the boundary

It is tempting to fix data quality in the database with a cleanup script that runs once a month. It never stays fixed, because the source keeps producing the same problems. Cleaning at the boundary, in the flow that moves the data, means every record is checked every time and the source system gets the feedback it needs.

It also means the cleanup is not a separate tool. Bulk data processing and data sync and change data capture run on the same platform, with the same connectors and the same audit trail as everything else. When the customer later wants to push a cleaned company list back into HubSpot, that is another flow, not another product.

What this means for your team

If your reporting and your CRM disagree, the fix is rarely a bigger dashboard. It is usually a clean, checked path from one system to the other, with the failures visible instead of silently loaded. That is a one-afternoon build in Neblex, and the demo above is most of the afternoon.

If you want to see it on your own data, ask for a demo and bring the two systems that disagree the most.

Frequently asked questions

Does the cleanup change the data in HubSpot?

No. The flow reads from HubSpot and writes to Supabase. When a quality rule fails, the run stops and names the record and the rule, so the team can correct it in HubSpot and replay. Writing corrections back to HubSpot would be a separate flow you choose to turn on.

How are duplicates decided?

By the field you choose, or the whole record. In the demo it is the normalized email address. Matching can be exact or fuzzy with a similarity threshold, and instead of dropping duplicates the step can tag them for a review branch.

Can this run continuously instead of on a schedule?

Yes. The HubSpot connector declares 48 polled triggers, so a flow can start when a contact is created or changed and check the new record on its way through.

Does it work with a plain PostgreSQL database instead of Supabase?

Yes. Supabase is PostgreSQL underneath, and the same flow writes to any PostgreSQL, MySQL, SQL Server, or Snowflake target through their connectors.

Talk to the people who build it

Bring us the product or the integration that hurts most

We will build it with you, on your data, with the run log open.