BACKLINE
GUIDE · B011

From Instagram DMs to Notion: the workflow nobody talks about

backline.so/blog

Most guides on Instagram DM management stop at the same point. They tell you to export your data. They tell you to organize your contacts. They might mention Notion as a destination. Then they leave you with a folder of JSON files and a blank Notion page and assume you’ll figure out the bridge between them.

The bridge is where everyone gets stuck. The export gives you raw data. Notion gives you a database. The space in between — where data becomes structured records, where threads become contacts, where messages become summaries — is the actual workflow, and it’s the part nobody walks through end to end.

This guide does. Three stages, what each one requires, where the friction lives, and how to compress the entire pipeline if you don’t want to do it manually.

The three stages of the workflow

Borrowed loosely from data engineering: extract, transform, load.

Extract. Get the data out of Instagram. The platform has to release it; you have to request it; the format you receive is fixed.

Transform. Convert the raw export into something resembling a CRM record. One row per contact instead of one row per message. Aggregate fields. Inferred status. Conversation summaries.

Load. Push the transformed data into Notion in a structure that’s actually usable — the right database properties, the right views, the right relationships.

Each stage has its own friction. Most workflows fail at one of them, usually the second.

Stage 1: Extract

This is the easy stage, mechanically. Instagram offers a full data export through Settings → Account Center → Your information and permissions → Download your information.

A few practical notes:

Choose JSON, not HTML. JSON is structured and parseable. HTML is human-readable but useless for any kind of automation.

Choose “all time” unless you have a specific reason not to. A partial export saves time on download but loses historical context that’s often the most valuable part.

Wait patiently. Instagram emails you a download link, usually within a few hours, sometimes up to 48 hours for large accounts. Don’t request multiple exports — they queue and slow each other down.

Verify the contents. When the zip arrives, open it and confirm the messages/inbox/ folder is populated. Each subfolder corresponds to one conversation thread. If you only see a few, your export is incomplete and you should re-request.

The extract stage is mostly about waiting and double-checking. The complexity is in what comes next.

Stage 2: Transform — the stage everyone underestimates

This is where the workflow lives or dies.

The Instagram export gives you, per conversation, a message_1.json file with the following structure: thread participants, a list of messages, each message with a sender, timestamp, and content. There may also be reactions, shared posts, voice memos, and other media references.

To build a Notion CRM from this, you need to produce records that look like this for each contact:

  • Display name — pulled from thread participants
  • Handle — Instagram username
  • First contact date — earliest message timestamp
  • Last contact date — latest message timestamp
  • Message count — total messages in thread
  • Last sender — was the most recent message from you or them?
  • Conversation summary — short description of what the thread covered
  • Inferred status — based on activity patterns

The transformation isn’t conceptually hard, but it has details that bite if you’re doing it manually.

Group conversations correctly. A single conversation thread can have multiple message_X.json files if it’s long. You need to merge them.

Handle group chats. Threads with more than two participants are common in artist circles (festival logistics, production groups, label conversations). They don’t fit a one-record-per-contact model cleanly. Decide whether to skip them, log them as “group” entries, or split them out.

Deduplicate aggressively. People change their display names on Instagram. The same person might appear under a slightly different name in two threads if they renamed. You’ll need to dedupe on handle, not name.

Sanitize the message content. If you’re auto-generating summaries, you need to handle voice memos, shared posts, and replies-to-stories — all of which are technically “messages” in the export but carry no useful conversation context.

This is the stage where DIY parsers usually break. Either they don’t handle the edge cases (group chats, renamed handles, media references) or they produce one row per message instead of one per contact, and you spend an hour in Excel pivot-tabling your way back to a usable structure.

Stage 3: Load — the Notion structure

Once you have transformed records, you need a Notion database that actually uses them.

A working Notion CRM for Instagram-derived contacts has the following properties:

  • Name (title)
  • Handle (text)
  • Role (select: promoter, label, fellow artist, agent, journalist, other)
  • City (text)
  • First contact (date)
  • Last contact (date)
  • Message count (number)
  • Status (select: cold, warm, active, in-negotiation, closed, dormant)
  • Last topic (text)
  • Next action (text)
  • Notes (text, long-form)

And the following views:

  • All contacts — default table view, sorted by last contact date descending
  • Active pipeline — filtered to status = active or in-negotiation, sorted by next action date
  • Orphan list — filtered to last contact > 90 days ago AND message count > 5, sorted by last contact ascending
  • By city — grouped by city, useful for tour planning
  • By role — grouped by role, useful for targeted outreach

Five views, eleven properties. This is the minimum useful structure. You can add more (tags, last topic categories, sub-databases for specific projects) but you’ll regret over-engineering. Build the minimum, use it for a month, then iterate based on what’s actually missing.

The load stage in Notion is mechanically simple if you have a CSV — you import, you map columns to properties, you create the views. The friction is in stage 2, which is what produces the CSV.

The friction-free version

Compressing all three stages into a single tool is what Backline does. You upload the Instagram export zip. The tool runs the extract (no waiting, since you’ve already got the file), the transform (handles all the edge cases above), and produces a Notion database directly via Notion’s API.

The whole pipeline takes about ten minutes from upload to working CRM. The trade-off is what you’d expect: it costs money, but it removes the entire stage 2 friction that breaks most DIY workflows.

For artists with technical comfort, doing this manually is achievable. Expect to spend a weekend writing a parser if you go from scratch. There are also open-source parsers on GitHub that get you most of the way, though they tend to handle the edge cases inconsistently.

The maintenance loop

The workflow doesn’t end at first import. The whole point of moving your DMs into Notion is to maintain them as a living system, which means re-running parts of the workflow periodically.

A practical cadence:

Weekly: manual updates only. New contacts go in by hand. Status changes get updated as conversations move. Notes get filled in for any meaningful exchange.

Quarterly: re-run the import to catch contacts that never made it into the CRM. New Instagram conversations from the last three months won’t be in your initial export, and manual entry alone tends to miss the casual threads that turn out to matter.

Annually: full re-export and reconciliation. By the end of the year, your Notion database has drifted from your Instagram inbox in a few directions. A full reconciliation surfaces what’s been missed.

Tools that handle the workflow end-to-end usually offer some form of incremental update — you upload a new export, they merge with the existing database. Manual workflows have to handle this through find-and-replace, which is doable but tedious.

The bottom line

The gap between “I have Instagram DMs” and “I have a working Notion CRM” is the actual product. Most guides skip it because it’s the unglamorous part — the data engineering middle that turns raw exports into structured records.

If you do this manually, expect the first import to take a weekend. Expect the maintenance to take an hour a week. Expect the value to compound after the first three months, when the orphan list starts producing reactivations you wouldn’t have made otherwise.

If you compress the workflow with a purpose-built tool, the first import takes ten minutes. The maintenance is the same hour a week. The value compounds the same way — just from an earlier starting point.

The destination is identical. The path you take depends on whether your time is more valuable than the cost of the tool.


Backline turns your Instagram DM export into a fully classified contact dashboard — encrypted upload, AI-powered summaries, music-industry tags. The workflow this article describes, compressed into ten minutes. See it at backline.so/how-it-works.