Setup guide
Connect your Notion database and your widget reads from it live. About ten minutes the first time—mostly duplicating the template and creating a Notion integration.
Create a Notion integration
This gives the widget secure permission to read—and write back to—your hooks database.
- Go to
notion.so/my-integrationsand click New integration. - Name it (e.g. Hook Lab) and pick your workspace.
- Under Capabilities, check both Read content and Update content.
- Submit, then copy the Internal Integration Secret—it starts with
ntn_. That string is your Notion token.
Winner/Retired status back to the winning and losing variants in your database—without Update content, the End Test button will fail.Prepare your Hook Lab database
Fastest path: duplicate the Hook Lab template into your own workspace—every property below arrives pre-built. Already tracking hooks in your own database? Rename its properties to match these exact names—they're case-sensitive.
| Property | Type | Notes |
|---|---|---|
Hook | Title | The opening line text—your database's title column, and the primary card content. |
Platform | Select | TikTok, Reels, Shorts. |
Status | Select | Drives the kanban column: Draft, Testing, Winner, Retired. A row with any other value (or blank) is dropped from the board. |
Video URL | URL | Optional. Set once the hook has been posted. |
View Count | Number | The primary performance signal—drives the Winners ranking and the Lab tab's leader. |
Completion Rate | Number | Optional. Percent, e.g. 0.42 for 42%. |
Saves | Number | Optional. Alt performance signal for platforms without a reliable completion rate. |
Hook Angle | Select | Optional freeform tagging: Question, Controversial, Stat/Fact, Callout, Story Cold-Open. |
Notes | Text | Optional. Freeform post-mortem—why a hook worked or didn't. |
Date Tested | Date | Used as a tie-break sort, and as the Lab tab's Timeline order. |
Board Order | Number | Optional. Manual position within a Status column. |
Parent Idea | Relation | Optional—see below. Powers the Lab tab's head-to-head testing view. |
Using Parent Idea for the Lab tab
Parent Idea is a self-referencing relation—it links a row to another row in this same database, and it's what groups variant hooks into a head-to-head test:
- Pick one row to be the idea root for the group—its own
Parent Ideastays blank. - For each variant phrasing testing that same idea, set its
Parent Ideato point at the idea-root row. - At least 2 variant rows pointing at the same root are required before the Lab tab will show it as a test—a single variant with no sibling won't appear there.
Parent Idea, and its type must be Relation, pointed at this same database (self-referencing)—not a new or unrelated database.Connect the integration to your database
Creating the integration isn't enough—you must give it access to the database itself.
- Open your hooks database as a full page in Notion.
- Click the ••• menu (top-right) → Connections → Connect to, and choose your integration from Step 1.
Copy your database ID
- Open the database as a full page and copy the URL.
- The database ID is the 32-character string after your workspace name and before the
?v=. Example:notion.so/you/1a2b3c…(32 chars)?v=… - Copy just those 32 characters.
Connect it on the left
- Paste your Notion token and database ID into the form.
- Click Connect. Your widget goes live immediately, and you'll get its embed URL.
Embed your widget anywhere
Once connected, you get one link—your widget's embed URL.
- Use it directly, or embed it anywhere that accepts an iframe: paste it into a Notion
/embedblock, or wrap it in an<iframe>for a website or CMS. - It's read-only for viewers, except for closing a Lab test—no one can edit hooks or Notion properties directly through it.
Colors and background
Accent color and a transparent background are both set from the Appearance section when you create or edit a widget on the left—no URL editing needed. Editing them there rewrites your embed URL automatically, so re-copy it afterward if you've already pasted it somewhere.
Other URL parameters
| Parameter | Effect |
|---|---|
?theme=light | Light background instead of the default dark theme. |
?theme=charcoal | Neutral dark background—a sleeker alternative to the default. |
&theme=charcoal.Updating & troubleshooting
Board empty or missing hooks? Check that:
- The integration is actually connected to the database (Step 3)—the most common miss.
- The database ID is the 32-char ID, not the view or page URL.
- Every row has a
Statusvalue that exactly matchesDraft,Testing,Winner, orRetired—anything else (including a blank) is dropped from the board. - Property names match exactly, including capitalization (Step 2).
A test isn't showing up on the Lab tab? It needs at least 2 rows with Parent Idea pointing at the same root row—see Step 2.
End Test button not working? Your integration needs the Update content capability, not just Read (Step 1).