How to combine HubSpot and Trello data into one CSV
Why this is harder than it looks
HubSpot knows a client as a company with deals. Trello knows the same client as a board, a list or a label. Neither tool knows the other exists, so exporting both and pasting them into one sheet won't line them up. You need a join key: a value that appears in both systems and means "this client".
If you get the join key right, the rest is plumbing. If you get it wrong, the combined CSV will look fine and still be wrong.
Step 1: Pick a join key
Here are some common choices, from most to least reliable:
1. Client code in both places. Add a custom company property in HubSpot (for example client_code = ACME), and start each Trello board name with the same code (ACME – Website retainer).
2. Company domain. HubSpot stores a domain on companies. Put the same domain in the Trello board description or in a custom field.
3. Exact client name. This is the easiest to set up and the easiest to break: "Acme Inc" and "Acme, Inc." won't match.
Whichever you choose, write it down in your onboarding checklist so new clients are set up the same way.
Step 2: Export each side to a clean table
You need two tables with one row per record and the join key in its own column.
HubSpot deals. Use a deals view export or the API (/crm/v3/objects/deals). Deals don't carry the company name themselves, so you have to pull the associated company and its client_code. You can do that with HubSpot's associations, or by including the associated company in a report. Keep dealname, amount, dealstage, closedate and client_code.
Trello cards. Use a board's CSV export (Premium Workspaces only, according to Trello's docs) or the API (/1/boards/{id}/cards). Take the client code from the board name, for example the text before the first – . Keep the card name, list, due date, last activity and client_code.
The guides [How to schedule an automatic HubSpot export to CSV](/hubspot-scheduled-csv-export) and [How to automate a Trello board export to CSV](/automate-trello-csv-export) include the scripts for both.
Step 3: Decide the shape of the combined file
This decision matters most. You have two reasonable choices.
A. One row per client (summary). This works best for account reviews.
`
client_code,open_deals,open_deal_value,open_cards,overdue_cards,last_trello_activity
ACME,2,14000,17,3,2026-10-12
`
B. One long table (stacked). This works best for filtering and pivot tables.
`
client_code,source,item,status,amount,due_or_close
ACME,hubspot,Q4 retainer,contractsent,9000,2026-10-31
ACME,trello,Homepage hero copy,In review,,2026-10-18
`
Avoid joining every deal to every card. If a client has 2 deals and 17 cards, a straight join produces 34 rows, the deal values get counted 17 times, and the totals become meaningless.
Step 4: Do the merge
In Google Sheets. Load both exports into tabs named hubspot and trello. For the summary layout, list the unique client codes in a third tab and use COUNTIFS and SUMIFS:
`
=COUNTIFS(hubspot!E:E, A2, hubspot!C:C, "<>closedwon")
=SUMIFS(hubspot!B:B, hubspot!E:E, A2)
=COUNTIFS(trello!E:E, A2)
`
Adjust the column letters to match your tabs.
In a script. If you're already exporting with Apps Script, build the stacked layout in code. Give both arrays the same columns (client_code, source, item, status, amount, date), put them together, and write one CSV. Add the summary as a second file if you need it.
Step 5: Check it every time
- Unmatched rows. List every HubSpot
client_codethat has no Trello board, and every board that has no HubSpot company. Usually that list is short and points to a typo or a missing setup step. - Row counts. The deal rows in the combined file should equal the rows in the HubSpot export, and the same goes for Trello cards.
- Stage names. HubSpot exports deal stages by their internal IDs through the API. Map them to readable names once, in a small lookup table.
- Dates. HubSpot and Trello both use ISO-style timestamps, but time zones can move a due date by a day. Use one time zone for everything.
Doing it without code
Automation tools such as Zapier and Make can write records from both apps into the same Google Sheet. That handles collecting the data. You still need the join key from Step 1 and the layout from Step 3, because no tool can guess which Trello board belongs to which HubSpot company.
Summary
1. Agree on one client code and put it in both systems.
2. Export each tool to a clean table with that code as a column.
3. Choose summary or stacked format, and never a straight deal-by-card join.
4. Check for unmatched clients and matching row counts every week.
We're building Sundayfile, which will start with a scheduled weekly HubSpot CSV saved to Google Drive. Combining HubSpot with Trello isn't something it does yet, so for now the steps above are the way to do it.