Import guide
Import HubSpot contacts and deals into monday.com on a schedule
Sales teams work in monday.com and the CRM history stays in HubSpot. Joining them by hand means exporting a list and hoping nobody edited a deal in between.
Boardfeed reads HubSpot contacts or deals on a schedule and updates a board in place, keyed on the HubSpot object id, so a lifecycle stage or an amount changing in HubSpot shows up on the board without anyone re-exporting.
Last checked : the two objects the connector reads, the 100-record page and the 5,000-page stop it adds up to (500,000 records), which properties come back, and the current Service Key route, read off the connector and the HubSpot pages it cites
Doing it by hand, every time
- Export contacts or deals from HubSpot as a CSV.
- Import into the board and map the properties you need — again.
- Notice afterwards that two contacts with the same name were merged into one row.
- Repeat whenever the sales team asks why the board is stale.
The scheduled route
- Create a Service Key in HubSpot (Settings → Integrations → Service Keys) with the read scopes you need: crm.objects.contacts.read for contacts, crm.objects.deals.read for deals (HubSpot’s scope names, developers.hubspot.com/docs/reference/api/crm/objects/contacts, read 2026-09-12). The key is shown once, at creation.
- Choose the object: contacts or deals. One import reads one of them.
- Map the properties to board columns and key the upsert on the HubSpot object id, not on a name or an e-mail address — both of those change.
- Pick the schedule and read the value check before saving.
- Every run pages through the object 100 records at a time, following HubSpot’s own cursor until it stops sending one. Whatever the cursor says, the walk stops at 5,000 pages rather than importing part of a larger object — 500,000 records.
Field mapping notes for HubSpot
This is the part that decides whether an import works on the first try. Everything below is handled in the mapping step, before the first run.
- Each row carries the object id, createdAt, updatedAt and archived, then one column per property HubSpot returned.
- Which properties those are is HubSpot’s default set for the object, not a list you choose — for a contact that is e-mail, first name, last name, the object id, the created date and the last-modified date (developers.hubspot.com/docs/reference/api/crm/objects/deals, read 2026-09-12). A custom property you rely on will not be among them, which is worth checking against a preview before you build the board around it.
- Object ids are unique and stable, which makes them the right key. An e-mail address is a workable second choice for contacts only.
- Enumerated properties such as lifecycle stage arrive as HubSpot’s internal strings (lead, marketingqualifiedlead). Map them to a status column and give the labels the words your board actually uses.
- Associations are not part of a row: the connector asks HubSpot for none and reads none, so a contact does not bring its company with it. Import what you need as its own board and relate the two there.
HubSpot import questions
Do I need a HubSpot OAuth app for this?
No. A Service Key with the read scopes for the object you import is enough, and it is scoped to your account. If you already hold a legacy private-app token it keeps working — it is the same bearer credential — but HubSpot is closing new private-app creation through late 2026 (developers.hubspot.com/changelog/legacy-private-app-creation-sunset, read 2026-09-13), so a Service Key is the route to start from now.
Which objects can Boardfeed import?
Contacts and deals. HubSpot has no endpoint that lists which object types a token may read, so the two are fixed rather than discovered, and companies are not among them today. A company list can be read through the REST API source with the same bearer token — see the REST API guide for the cursor settings.
Do deals update when the amount changes?
Yes, when the deal is keyed on its HubSpot object id: the changed property is read on the next run and the item is updated in place rather than duplicated.
Does an EU account need a different setting?
No. HubSpot routes api.hubapi.com to the account’s own data centre, so one address serves EU and North American accounts alike. This was checked against a real EU account on 2026-09-13.
How many contacts or deals does one run import?
As much as one run reads. The connector takes no date-range or list setting, so it pages through the whole object, 100 records a page — and it stops at 5,000 pages rather than importing part of a larger object, which is 500,000 records. A portal holding more than that needs the REST API source with a filter of its own, using the same Service Key. The stop is not silent: the run ends as failed and its record says how many rows it had already written, and those rows stay on the board — so re-run it in update mode once the source is narrower, or a create-mode re-run adds them a second time. The first run against a portal that has been in use for years can be large: check the row count against your monthly allowance before you schedule it.