Guide

How to import your habit tracker notes into Notion using AI

September 8, 2026

A month of habit and metric data in the Personal Habit Tracker side panel, ready to export

A habit tracker is good at capturing the day. It is less good at being the place you plan from. If Notion is already where your projects and reviews live, it makes sense to get your tracked history in there too, so a month of habit data sits next to the notes you actually write.

The obstacle is shape, not size. Notion imports a flat table happily: one row, one day, one column per thing you track. The export from Personal Habit Tracker is nested JSON, grouped by month and then by habit. Reshaping that by hand is miserable. It is exactly the sort of dull, structured transformation an AI does well.

Worth knowing before you start.
The extension keeps everything on your device on purpose. The moment you paste or upload that export into a cloud AI tool, that data leaves your machine and is subject to that provider's policies. If your notes are personal, either strip the free-text fields first or use a local model. This is a genuine trade-off, not a footnote.

Step 1: export your history

In the extension, open settings and export. You get a file named something like personal-habit-tracker-2026-09-08.json. Open it in any text editor and the structure looks like this, trimmed down:

{
  "meta": { "version": "1.0", "trackerName": "My Habit Tracker" },
  "habits": [
    { "id": "h_exercise", "name": "Exercise", "weight": 3, "archived": false },
    { "id": "h_read", "name": "Read", "weight": 2, "archived": false }
  ],
  "metrics": [
    { "id": "m_sleep", "name": "Sleep", "unit": "h", "weight": 3, "archived": false }
  ],
  "entries":       { "2026-09": { "h_exercise": { "01": true, "02": false } } },
  "metricEntries": { "2026-09": { "m_sleep":    { "01": 7.5, "02": 6 } } },
  "moods":         { "2026-09": { "01": "happy", "02": "neutral" } },
  "moments":       { "2026-09": { "01": "Long walk before work." } },
  "todoNotes":     { "2026-09": "Finish the quarterly report" },
  "planningNotes": { "2026-09": "Carry the morning routine into October" }
}

Three things about this shape matter for the prompt you are about to write:

  • Days are stored as "01", "02" and so on, not as full dates. The real date only exists once you join the month key to the day number.
  • Habits and metrics are referenced by id in the entries, and the readable name lives separately in the habits and metrics arrays. Something has to look those up.
  • weight is the importance you set: 1 is Low, 2 is Medium, 3 is High.

If the AI does not know these three things it will guess, and guessing here produces a table with columns called h_exercise and dates like 01. Say them explicitly.

Step 2: decide what the Notion database should be

Do not try to model everything in one table. Two databases covers almost every use:

  • Daily Log: one row per day. Date, mood, the day's note, a checkbox per habit, a number per metric. This is the one you will actually look at.
  • Trackers: one row per habit or metric, holding the name, type, unit and importance weight. Small, but it means your weights and units survive the move.

Step 3: the prompt that does the reshaping

Upload the JSON file rather than pasting it, if your tool allows it. Pasting a year of data burns through the context window and is where truncation errors creep in.

Prompt 1 · Flatten to a daily log CSV
I'm attaching a JSON export from a habit tracker browser extension.
Convert it into a single CSV I can import into Notion.

The structure works like this:
- "habits" and "metrics" are arrays of definitions. Each has an "id",
  a human-readable "name", and a "weight" where 1=Low, 2=Medium, 3=High.
  Metrics also have a "unit".
- "entries" is keyed [month]["habit id"][day] and the value is a
  boolean for whether the habit was done.
- "metricEntries" is keyed [month]["metric id"][day] and the value is
  a number.
- "moods" is keyed [month][day], value is "happy", "neutral" or "sad".
- "moments" is keyed [month][day], value is my free-text note.
- Month keys are "YYYY-MM". Day keys are "01" to "31", NOT full dates.

Rules for the output:
1. One row per calendar day that has any data at all. Skip empty days.
2. First column "Date", as YYYY-MM-DD, built by joining the month key
   and the day key. Do not invent dates that aren't in the file.
3. Then "Mood", then "Note" (from "moments").
4. Then one column per habit, using its readable NAME, not its id.
   Values must be "Yes" or "No".
5. Then one column per metric, named "Name (unit)", e.g. "Sleep (h)".
   Leave the cell blank if nothing was logged that day.
6. Skip anything where "archived" is true.
7. Quote any field containing a comma. Return only the CSV, no commentary.

Tell me the row count and the date range you produced, so I can check it.

That last line is the one people skip. Asking for the row count and date range gives you something cheap to verify against the tracker, and it catches the most common failure: an AI quietly processing only the first month of a long file.

For the second table:

Prompt 2 · The trackers reference table
From the same file, produce a second CSV describing what I track.

Columns: Name, Type, Unit, Importance, Archived
- Type is "Habit" or "Metric" depending on which array it came from.
- Unit is blank for habits.
- Importance maps weight 1 to "Low", 2 to "Medium", 3 to "High".
- Include archived entries here, with Archived as Yes or No.

Return only the CSV.

Step 4: import into Notion

Save the output as .csv, then in Notion use Import and pick CSV. Notion creates the database but it guesses property types conservatively, so fix these by hand afterwards:

  • Date to the Date type, or every sort and calendar view will be alphabetical.
  • Habit columns to Checkbox. Notion reads Yes and No correctly once the type is set.
  • Metric columns to Number, otherwise averages and rollups will not work.
  • Mood to Select, which gets you grouping and colour coding for free.

Then add a calendar view on Date, and a board view grouped by Mood. Those two take a minute and are the main reason to have done this at all.

Step 5: go further than a flat table

Once the raw data is in, the same export answers questions the tracker itself does not surface. These prompts produce Notion-ready markdown you can paste straight into a page.

Prompt 3 · A monthly review page
Using the attached export, write a monthly review for [MONTH] as
Notion-flavoured markdown.

Include:
- A heading with the month name.
- A short table: each habit, days completed, days possible,
  completion percentage.
- Average, minimum and maximum for each metric, with its unit.
- Mood breakdown as counts and percentages of happy/neutral/sad.
- The three most interesting notes from "moments" for that month,
  quoted exactly. Do not paraphrase them.
- A "Questions for next month" section with 3 questions the data
  actually raises.

Every number must come from the file. If something can't be
calculated, write "no data" rather than estimating.
Prompt 4 · Look for patterns worth testing
Using the attached export, look for relationships between my habits,
my metrics and my mood.

For each pattern you find, give me:
- The claim in one sentence.
- The specific numbers behind it, including how many days it's based on.
- How confident you are, and why.

Rules: no correlation claimed on fewer than 20 days of overlapping
data. Say "not enough data" instead. Do not imply causation. List
anything that looks like a pattern but is probably just the sample
being small.

The constraints in that last prompt are doing real work. Left unconstrained, a model will happily tell you that reading improves your sleep based on four overlapping days. Forcing it to state the sample size makes weak findings obvious at a glance.

Where this goes wrong

  • Silent truncation. Long exports get cut off mid-file. Verify the row count and date range against your tracker every time.
  • Arithmetic drift. Language models are unreliable at totalling long columns. Treat any percentage as a draft until you check one or two by hand, or ask the tool to compute it with code if it can.
  • Fabricated dates. Because days are stored as bare numbers, a model that misreads the structure will generate plausible-looking dates that were never in your file. Spot-check the first and last rows.
  • One-way trip. Notion is now a copy, not a sync. Keep logging in the extension and re-import periodically, or you will end up maintaining two half-complete histories.

A reasonable rhythm

Doing this daily is a chore that will not survive the month. Doing it once, at the end of each month, takes about five minutes: export, run prompt 1, import, run prompt 3 into a review page. The tracker stays the fast place to log, and Notion becomes the place you actually think.

Get Personal Habit Tracker free

Sitting on months of daily notes and wondering what else they are good for? We also wrote about turning those notes into blog posts.

Need a tool shaped around your workflow?

We build small, focused apps and extensions that fit how you already work.

Start a project