A TypeScript utility library for interacting with Notion databases, providing a structured and type-safe way to manage and retrieve data from Notion.
Install the package using npm:
npm install @nendlabs/notion
Before using this library, you need to set up a database in Notion and ensure that all pages have the required properties.
- Open Notion and create a new page.
- Click on "+ Add a database" and choose "Table" (or any other view you prefer).
- Add the following properties to your database:
- Title (Title): The title of the page.
- Created (Created time): Automatically tracks the creation time.
- Last edited (Last edited time): Automatically tracks the last edit time.
- Open your Notion database.
- Click on the "Share" button at the top right corner.
- Enable "Share to the web" and copy the link.
- The database ID is the part of the URL after
https://www.notion.so/
and before the?v=
. For example, inhttps://www.notion.so/your-workspace/123abcde1234567890abcdef12345678?v=...
, the database ID is123abcde1234567890abcdef12345678
.
- Go to Notion Integrations.
- Click on the "+ New integration" button.
- Give your integration a name, associate it with your workspace, and click "Submit".
- Copy the "Internal Integration Token" that appears.
First, import the Notion
class and configure it with your Notion integration's authentication token and database IDs:
import { Notion } from '@nendlabs/notion';
const notion = new Notion({
auth: 'your-notion-auth-token',
databases: {
contacts: {
databaseId: 'your-database-id',
// Optionally, provide a custom function to parse page metadata
parsePageMetadata: (page) => ({
// Custom metadata parsing logic
}),
},
},
});
To get metadata for all pages in a database:
const pagesMetadata = await notion.databases.contacts.getPagesMetadata();
To get a single page by ID with its content converted to markdown:
const page = await notion.databases.contacts.getPageById('page-id');
To create a new page in a database:
const newPageId = await notion.databases.contacts.createPage({
title: {
type: 'title',
title: [
{
type: 'text',
text: {
content: 'New Page Title',
},
},
],
},
// Additional properties...
});
Saving simple forms directly to a database can be done with the forms
object provided by the sdk.
import { Notion, NotionForms } from '@nendlabs/notion';
const notion = new Notion({
auth: 'xxx',
databases: {
contactForms: NotionForms.useContactFormDatabase('databaseId'),
},
});
const formId = await NotionForms.saveContactForm(
notion.databases.contactForms,
{
title: 'example form',
submittedBy: 'Ada Noi',
email: 'ada@nendlabs.com',
body: "Hello I'd like to discuss your @nendlabs/notion package.",
},
);