Integration
HubSpot and Naffes CRM: running both side by side
Naffes CRM connects to HubSpot with a private-app token. It pushes deals on every stage change or on demand, and pulls contacts and deals up to 50 records per click. It is built for running both systems together, not for a full migration.
When this integration helps
Some companies run two CRMs for a while: an Arabic-speaking sales team or a regional branch works in Naffes, while head office stays on HubSpot. What head office needs is the deals, their amounts and expected close dates, without anyone typing them twice.
- Automatic push. Every deal stage change in Naffes pushes that deal to HubSpot.
- Push on demand. From the deal header menu: Integrations > Push to HubSpot.
- Pull per click. The HubSpot settings page pulls up to 50 contacts or 50 deals each time you click.
- No duplicates. Naffes stores the ID mapping between the two systems, so the next sync updates the same record.
Setup
Create a private app in HubSpot
HubSpot now lists private apps under Legacy apps in its development tools, and creating one requires super admin access. Grant read and write scopes for contacts and deals.
Copy the token and portal ID
The access token is on the app's Auth tab. Note your HubSpot portal ID as well.
Enter them in Naffes
As an admin, open Marketplace > HubSpot > Configure HubSpot, paste the token and portal ID, and click Save.
Test the connection
Click Test connection. Naffes calls HubSpot's contacts API and shows the result and latency.
Try one deal first
Open a test deal, choose Push to HubSpot and read the result message before relying on automatic pushes.
Which fields move
| Operation | Direction | Fields |
|---|---|---|
| Push a deal | Naffes to HubSpot | Deal name, amount, expected close date, matched stage ID, matched pipeline ID |
| Pull contacts | HubSpot to Naffes | Email, first name, last name, job title; contacts without email are skipped |
| Pull deals | HubSpot to Naffes | Name, amount, close date; new deals land in a default stage |
On a pull, records are matched by the stored HubSpot ID first, and contacts also by email. After each click the page shows how many records were created and how many were updated.
Before pushing a deal, Naffes reads HubSpot pipelines and matches the pipeline and stage labels against the Naffes names, including saved translations. It sends the matched internal IDs and refuses to write the deal when a match is missing or ambiguous. Use matching, unique labels and test one deal first.
Limits
- Not a migration tool. Each click reads only the first page of HubSpot results, and clicking again reads that same page, so it cannot move a full database.
- Not transferred: companies, activities, notes, owners and HubSpot stages.
- Deals only on push. There is no contact push from Naffes to HubSpot in the UI.
- Pasted token, not OAuth. A workspace admin stores a private-app token, which is never sent back to the browser after saving.
To move everything at once, export from HubSpot and use the Naffes import wizard, which maps columns by keyword and lets AI fill the rest. For system-to-system work, see the REST API.
Questions
Questions 4
Can I migrate from HubSpot with this?
Not a full database. Pulls are limited to the first page of 50 records and skip companies and activities. Export from HubSpot and use the Naffes import wizard instead.
Will pulling twice create duplicates?
No. The ID mapping, plus email matching for contacts, means existing records are updated.
Why did a deal push fail?
Check that pipeline and stage labels match uniquely between the systems, then review token permissions. The manual push reports the cause; Naffes resolves internal IDs before submitting a deal.
Where do pulled deals appear?
In the Naffes deals list, in a default stage, because HubSpot stages are not mapped. Move them to the right stage afterwards.
Sources
- HubSpot Developers: Private appsAccessed
- HubSpot Developers: Deals APIAccessed