HubSpot Marketing Hub to Customer.io: what the vendor docs actually cover
Linked sentences come from vendor documentation opened for this page. Everything else is general guidance, not HubSpot Marketing Hub or Customer.io vendor documentation. This section does not move data and does not change the catalog outline above.
What to export from HubSpot Marketing Hub
HubSpot's exports API, opened 2026-10-17, is the source procedure for people and lists. POST /crm/v3/exports/export/async starts a job. exportType is VIEW or LIST. format is XLSX, CSV, or XLS. objectType for contacts can be the name CONTACT. A list export also needs the ILS list id, which the page says you copy from the list details panel, not the other contact-list id. OAuth requires a super admin to grant crm.export. You can attach up to four associated object types. Association labels are optional. Internal property names and values are optional via exportInternalValuesOptions. Default association cap is 1,000 per row unless you set the override flag. Retrieval is GET on /crm/v3/exports/export/async/tasks/{exportId}/status. Status values include COMPLETE, PENDING, PROCESSING, and CANCELED. A finished job returns a download URL that expires five minutes after the completed request, and that URL works without another Authorization header. Limits are 30 exports in a rolling 24 hours and one export at a time. CSV or XLSX files past 1,000,000 rows, and any CSV past 2MB, arrive zipped. Workflows, emails, and landing pages are not in this API's object list as described. The Marketing Hub pricing URL the same day showed a pricing-data error and no dollar table. The catalog's zero starting price and free-plan flag could not be confirmed or contradicted from that error. No discrepancy is asserted.
How Customer.io imports
Customer.io's CSV article, opened the same day, loads people or events from a file or a Google Sheet. Each row is a person or an event. Each column is an attribute or an event property. The file must be under 100MB and at most 100 columns, and it needs an identifier column: id, email, phone, or cio_id when updating. Adding people requires an id column. Updates can match email or phone. The UI path is People, Add people, CSV or Google Sheets. The App API can also post /v1/imports with a public data_file_url that should expire about two hours after you start, an identifier of id or email, and a type of people. data_to_process defaults to all and can be add-only or update-only. Event imports cannot be add-only. Uploading people is described as an identify per row. The pricing page prints Essentials from 100 dollars a month billed monthly for 5,000 profiles, then a ladder through 50,000-plus at 505 dollars and up. Additional profiles on Essentials are 0.009 dollars. Additional 1,000 emails are 0.12 dollars on every plan column. Premium starts at 1,000 dollars a month billed yearly. Enterprise is let's talk. Seats are unlimited. Essentials allows 2 workspaces and 2 object types. Premium migration support and a dedicated technical specialist are marked available at an additional cost. A start-a-trial link is on the page. The catalog starting price of 100 matches Essentials. The catalog trial flag matches the trial link. Profiles count people and objects together. HubSpot workflows do not become journeys by being in the CSV.
- Customer.io CSV import — checked 2026-10-17
- Customer.io pricing — checked 2026-10-17
Object and field mapping
- A HubSpot contact is the closest object to a Customer.io person. Map email or a stable id. Customer.io wants id when the row is a create.
- A HubSpot list can be exported with exportType LIST and the ILS id. Customer.io does not say that list becomes a segment. You would rebuild the segment.
- Marketing-contact status is a HubSpot billing concept the import article on the HubSpot side mentions for imports into HubSpot. It is not a Customer.io column on the CSV page.
- Workflows, marketing emails, and landing pages are not rows in the exports API description. They stay in HubSpot.
- Object types on Essentials are capped at 2. A HubSpot custom object export is a different objectType and may not fit.
- Association ids can ride along in the HubSpot file, up to four associated types. Customer.io's people CSV does not describe those association columns.
- The five-minute HubSpot download URL is not the two-hour public URL Customer.io's API wants. Copy the file to storage you control.
What will not carry over
- Journeys, workflows, and email templates. Neither doc says they convert.
- Landing pages and forms.
- A HubSpot Marketing Hub dollar amount. The pricing URL errored.
- More than 100 columns or 100MB in one Customer.io CSV.
- The ILS list id as a Customer.io identifier. It identifies a HubSpot list, not a person.
- Premium migration support as included. The pricing table marks it as an extra cost.
- A second concurrent HubSpot export. The limit is one at a time.
Cutover checklist
- Export contacts as CSV with the properties you will map, using a super admin if the call is OAuth.
- Download before the five-minute URL dies, then host a short-lived copy if you use the Customer.io imports API.
- Add an id column before create. Email-only files are for updates, on the CSV article's rule.
- Stay under 100 columns and 100MB. Split the file if the HubSpot zip is larger.
- Rebuild segments in Customer.io. Do not expect the ILS list to appear as an audience.
- Leave workflows running in HubSpot until a sample journey in Customer.io sends to the same people.
- Budget Essentials from 100 dollars a month if you are under 5,000 profiles, and 0.009 dollars for each extra profile.
- Treat Marketing Hub's missing price table as unknown, not as free, until the page loads.
Common pitfalls
- Using the wrong HubSpot list id. The exports page says contact lists have two ids and only the ILS id works.
- Leaving the download URL in a ticket. It is unauthenticated until it expires.
- Counting a workflow export that the API did not offer.
- Assuming migration support is inside the 1,000-dollar Premium card. The table says it costs more.
- Declaring Marketing Hub free because the catalog says 0, after the live price table failed to load. Say the page errored.
Related catalog pages
- What should replace HubSpot Marketing Hub? — Switch narrative
- Customer.io product page — Behavioral messaging for product-led teams — events in, messages out.
- Marketing category — Catalog hub for this category
Questions teams actually ask
Will Customer.io import HubSpot workflows?+–
No page opened here says that. HubSpot's exports API moves records from a view or a list. Customer.io's CSV article creates or updates people and can send events. Journeys are rebuilt.
Which HubSpot id exports a list?+–
The ILS list id, copied from the list details panel. The exports doc says contact lists have another id that must not be used in the request.
What does Customer.io cost?+–
Essentials starts at $100 per month billed monthly for 5,000 profiles. Extra profiles on that plan are $0.009. Extra 1,000 emails are $0.12. Premium starts at $1,000 per month billed yearly. Checked 2026-10-17. The catalog's $100 starting price matches Essentials.
What does Marketing Hub cost on this check?+–
Unknown. www.hubspot.com/pricing/marketing showed a pricing-data error and no dollar table. The catalog's $0 starting price was not confirmed and was not edited.
How long is the HubSpot download link good?+–
Five minutes after the completed status request. You can GET the status again for a new URL. The link does not require an Authorization header, so do not forward it.
Last reviewed: 2026-10-17
Sources
Afterstack is not the vendor. This agent does not move data, does not authenticate to HubSpot Marketing Hub or Customer.io, and does not sell a rank. Methodology.