Importing notes into HubSpot is one of those tasks that sounds simple until you try it. The HubSpot docs cover the mechanics of the import tool, the API reference has the endpoints, and the integrations marketplace has dozens of options. The hard part is figuring out which method fits your actual situation: a one-time CSV migration from another CRM is a different problem from an ongoing sync from your Notion workspace, and the right tool for each is genuinely different.

This guide covers the four legitimate methods to get notes into HubSpot, what each one is built for, where each one falls down, and how to pick. By the end you should be able to look at your data shape (how many notes, where they live, how often the import needs to run) and know exactly which method to reach for.

In this article

1.

2.

3.

4.

5.

6.

7.

8.

What "importing notes" actually means in HubSpot

A note in HubSpot is a specific type of activity attached to a contact, company, or deal record. It shows up on the activity timeline alongside emails, meetings, calls, and tasks. Importing notes means creating those activity records programmatically (or in bulk) instead of having a rep type them by hand into the activity composer.

The thing to clarify before picking a method is whether you are importing once or continuously. The two cases split cleanly, and almost every wrong tool choice comes from confusing them.

  • A one-time migration

    Moving from Salesforce to HubSpot, or pulling historical notes out of a spreadsheet. You run it once, validate it, and never touch it again.

  • A continuous sync

    Every new note in Notion or in your AI notetaker should land on the matching HubSpot record. The import never really finishes, because new notes get written every day.

A one-time CSV migration from another CRM is a different problem from an ongoing sync from your Notion workspace, and the right tool for each is genuinely different.

The four methods below split along that line. Two of them are built for the one-time case, and two are built for the continuous case.

Method 1: CSV import through HubSpot's native import tool

The right answer for one-time bulk imports.

  1. 1

    Start the import

    In HubSpot, go to Contacts > Import and click Start an import.

  2. 2

    Choose the file

    Choose File from computer and select the file.

  3. 3

    Select the Notes object

    Choose One file, and on the One object page select Notes under the Engagements category.

  4. 4

    Map the columns

    Match each column in the CSV to a HubSpot property. The required mappings are Activity date, Note body, and at least one association property (Contact email, Company domain, or Deal ID).

  5. 5

    Run the import

    Kick off the import and let HubSpot handle the matching.

The CSV format that HubSpot expects looks like:

Note Body,Activity Date,Contact Email
"Discovery call summary. Talked about timeline and budget.",2025-08-15,jane@acme.com
"Sent revised proposal with annual discount option.",2025-08-22,jane@acme.com

HubSpot creates a separate note record for each row and attaches it to the matched contact. If multiple contacts share the email, HubSpot attaches the note to all of them. If no match is found, the row is skipped and surfaced in the post-import error log.

Where CSV import shines

  • A migration from Salesforce, Pipedrive, or a spreadsheet
  • Thousands of notes with clean structure, one row per note
  • Association columns already populated
  • Runs in minutes with HubSpot handling the matching

Where it falls down

  • Notes in the CSV are plain text only
  • Headings, bullets, bold, and links get stripped or arrive as raw markdown
  • The cleanup tax after a rich-content import can exceed the time saved
  • No support for ongoing or repeated imports

For the broader CSV import workflow, the HubSpot note management guide covers the related cleanup patterns.

Method 2: The HubSpot API

The right answer for programmatic imports at scale, custom logic, or ongoing one-direction syncs that you control.

The relevant endpoint is POST /crm/v3/objects/notes, which creates a single note record with associations. The minimum body looks like:

{
  "properties": {
    "hs_timestamp": "2025-08-15T14:30:00Z",
    "hs_note_body": "<p>Discovery call summary.</p>"
  },
  "associations": [
    {
      "to": { "id": "1234567" },
      "types": [{ "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 202 }]
    }
  ]
}

hs_note_body accepts HTML, which is what makes the API the right answer when formatting matters. Wrap headings in <h2> tags, bullets in <ul><li>, bold text in <strong>, and the note renders correctly on the HubSpot timeline.

Where the API shines

  • Bulk imports with rich content preserved
  • Programmatic imports from custom systems
  • Ongoing syncs where you control the source side
  • Per-team customization of how notes get formatted

Where it falls down

  • Requires engineering effort to build and own
  • Rate limits of up to 100 requests per 10 seconds per portal on the standard tier
  • Auth handling and token rotation
  • Maintenance burden a year out when the source or HubSpot changes

If your team does not have engineers, this is the wrong path.

Method 3: Native integrations

For the cases where the source tool has an existing HubSpot connector.

  • HubSpot's native Notion embed

    Lets you embed a Notion page inside a HubSpot contact, company, or deal record. The page renders inside an iframe. The downside is that this is not really an "import" in the sense most teams mean. The note does not land on the activity timeline. It is a viewer for content that lives elsewhere. The post on the Notion HubSpot integration methods covers where this fits and where it does not.

  • AI notetaker integrations

    Granola, Fireflies, Read AI, Avoma, and similar tools have native HubSpot integrations that push the structured meeting summary onto the matched contact or deal as a note. This is the right answer for the meeting-notes-specific case. The best AI notetakers for HubSpot guide covers which ones write to HubSpot cleanly.

  • Google Workspace integrations

    Gmail and Calendar integrations log emails and meeting events automatically. They do not import "notes" per se but they handle the activity-logging side of the same problem.

Method 4: Purpose-built sync tools

The right answer for ongoing imports from a writing tool where rich formatting matters.

The category most teams underbuild is the Notion-to-HubSpot sync. Reps write detailed call summaries, account strategy docs, and meeting notes in Notion because Notion is a better writing environment than HubSpot. The notes need to land on the HubSpot timeline so the rest of the team has the context. Generic automation tools like Zapier and Make can move text between the two but strip Notion's rich content because the block model does not translate cleanly. The output looks ugly and reps stop trusting the workflow.

NoteLinker is built specifically for this pairing. A Sync to HubSpot checkbox on any Notion row pushes the formatted page onto the matching HubSpot contact or deal timeline, with headings, bullets, and bold text preserved. No CSV step, no API code, no Zapier maintenance. The two-minute setup guide covers the install end to end.

For any source tool where notes need to flow continuously into HubSpot and rich formatting matters, a purpose-built tool usually beats a generic automation pipeline.

Import Notion Notes into HubSpot Without the Cleanup Tax

NoteLinker pushes formatted Notion pages onto the matching HubSpot contact and deal timelines automatically. Headings, bullets, and bold text preserved.

Get Started

Picking the right import method

A short decision framework that holds up.

PickCSV importWhenA one-time migration of mostly plain-text notes

The fastest path, and you only do it once. Right for moving off another CRM or a spreadsheet where formatting does not matter much.

PickThe HubSpot APIWhenA one-time migration with rich content or custom logic

Right when formatting has to survive or thousands of notes need custom handling. Budget engineering time accordingly.

PickA native integrationWhenYour source tool already has a HubSpot connector

If the existing integration does what you need, use it. Do not reinvent it.

Best fitPickA purpose-built sync toolWhenOngoing imports from a rich-content writing tool

Right for continuous syncs from Notion or another rich-content source. The maintenance and formatting headaches of any other route add up fast.

Common HubSpot note import mistakes

Four patterns that consistently make imports painful.

  • Importing without de-duplication checks

    Re-running an import without checking for existing notes produces duplicate activities on every contact. HubSpot has no automatic dedup for notes. Use a unique identifier in your CSV (a third-party note ID column) and check against HubSpot's existing notes via the API before re-running.

  • Skipping the test import

    HubSpot's import tool offers a 100-row sample import option. Use it. It catches mapping errors, encoding issues, and association mismatches before they propagate to ten thousand rows.

  • Importing notes without associations

    A note with no contact, company, or deal association lands in HubSpot orphaned. It is technically there. Nobody will ever find it. Always include at least one association column (Contact email, Company domain, or Deal ID) and validate that the values match existing HubSpot records before importing.

  • Pasting transcripts as notes

    AI notetaker transcripts are useful raw data and are usually too long to be useful as HubSpot notes. Import the summary, not the transcript. Attach the transcript as a file if it matters for compliance.

Before you run any import

  • Decide whether this is a one-time migration or a continuous sync, and pick the method to match.
  • Run the 100-row sample import and review the result before the full load.
  • Confirm every row has at least one valid association (Contact email, Company domain, or Deal ID).
  • Add a unique note ID column so a re-run does not create duplicates.
  • Import summaries rather than full transcripts, and attach transcripts as files where needed.

The right import method for your data is whichever one matches the import frequency, the content richness, and the team's engineering capacity. Pick deliberately, set up the dedup discipline, and the notes will land where reps actually look for them.

Frequently Asked Questions