Reference content for the "Shared Data" section of the HubSpot Marketplace listing — describes exactly how CleanMerge's requested OAuth scopes are currently used. This is written to be accurate as of today's build, not aspirational.
| Scope requested | crm.objects.contacts.read, crm.objects.contacts.write, crm.schemas.contacts.write |
|---|---|
| Direction | Bidirectional |
| Fields | firstname, lastname, email, phone, plus any warehouse-mapped custom properties |
| How it's actually used |
The CleanMerge: Normalize CRM Data workflow action does not call HubSpot's CRM API at all — HubSpot's own workflow engine passes the selected property's value into the action and writes the returned value back to whichever property the workflow is configured to update. CleanMerge never reads or writes a Contact record directly for this feature. The read/write scopes support two internal-admin capabilities: the duplicate-detection and merge engine (reads Contacts to find likely duplicates; on a human-approved or high-confidence match, normalizes and merges via HubSpot's Merge API), and the warehouse-ingest pipeline (reads Contacts to match incoming warehouse rows against existing records; creates a new Contact or updates a matched one, and can create a custom property via the schema-write scope if a mapping calls for a field that doesn't exist yet). |
| Scope requested | crm.objects.companies.read, crm.objects.companies.write, crm.schemas.companies.write |
|---|---|
| Direction | Bidirectional |
| Fields | name, domain, phone, plus any warehouse-mapped custom properties |
| How it's actually used | Same as Contacts above — the workflow action doesn't touch Company records directly; read/write is used by the merge engine and the warehouse-ingest pipeline. |
| Scope requested | conversations.read, crm.objects.owners.read — requested as optional scopes, not required for every installer |
|---|---|
| Direction | Read only |
| Fields | A created Contact's hs_object_source_label (to tell whether it came from Conversations); HubSpot Owner id/email |
| How it's actually used |
Supports Contact Gate: a reverse-quarantine tool for Contacts HubSpot auto-creates from unknown Conversations/Help Desk senders. On a contact.creation webhook, CleanMerge checks the new Contact's source label — if it's Conversations and the portal's policy says to quarantine it, the Contact is archived within seconds and held in a review queue for a human to promote or discard, rather than staying in the CRM. Every portal defaults to a dry-run mode (log the decision, never delete) until manually confirmed safe for that account. Owners are only used to bulk-seed an allowlist of staff email addresses, on request.Kept optional rather than required because most installers only use the free workflow action and never touch Contact Gate — this scope is only requested when walking a specific customer through setup for this feature, not from every installer by default. |
The review queue, merge executor, and warehouse-ingest configuration are all real and deployed, but reachable only by CleanMerge's operator via internal admin endpoints today — not by installers. If/when any of these become self-serve, this page should be updated to reflect installers configuring and triggering them directly, rather than requesting it on their behalf.