Gmail to Notion: every email becomes a database row

To save Gmail emails to Notion, nana800 uses two blocks: gmail incoming email checks your Inbox once a minute, and Notion creates a database row for every new email. The subject becomes the title, the sender and date go into columns, and the start or the whole text of the email can go on the row page. You need Gmail access and an internal Notion integration token, no code required.

Build it in the builder

What you can automate

  • Handle requests from your mail as tasks: each email is a database row whose Status column starts with the New option
  • Keep a client request database with From, Subject and Date columns and discuss each email with your team right on its Notion page
  • Collect the newsletters you follow in a Read later database: from:digest@example.com in the trigger search, the subject as the title, the start of the text on the page
  • Keep one email conversation on one page: the scheme finds the row created earlier by thread_id and adds the new email to its end
  • File the emails of one client in a separate database: from:@client.com in the trigger search and the link to that database in the Notion block

How to set it up

  1. 1

    Create a Notion integration and share the database

    On the Notion integrations page create an Internal integration and copy the Internal Integration Secret, which starts with ntn_ or secret_. Open the database for emails, press the three dots at the top right, choose Connections and add the integration, otherwise Notion answers object_not_found.

  2. 2

    Prepare the database columns

    The title column takes the email subject. Add From (Text), Date (Date), Thread (Text) and a Status column with a New option created in advance. The from field comes with the name, for example Anna <anna@example.com>, so a Text column suits it best.

  3. 3

    Connect Gmail

    Create a scheme with the gmail incoming email trigger, enter the address and pick how to sign in: APP_PASSWORD_IMAP with a Google app password, or OAUTH_CLIENT with a client ID, client secret and refresh token. Use search query to pick the emails right away, for example subject:(request), an empty field means every Inbox email.

  4. 4

    Set up the Notion block

    Add the block, paste the token, choose create_page and paste the database link from the address bar. Put subject into the page title. In the simple properties list: From - from, Date - date, Thread - thread_id, Status - New. A Date column takes the ISO date of the trigger as is.

  5. 5

    Put the email text on the page

    Put snippet or body_text into the page text. Every non-empty line becomes a paragraph, but Notion accepts at most 100 paragraphs and blocks per run. An email with a signature and quoted earlier messages can have more lines, then the block fails and no row appears, so snippet is safer for long conversations.

  6. 6

    Turn the scheme on and check the row

    The first check only remembers the emails already in the Inbox. Send yourself an email: after the next check a row appears in the database, and its link is in record_url of the Notion block. An enabled scheme costs $0.0042 per hour.

Pricing

A run of a Gmail block costs $0.002, a run of a Notion block costs $0.002. Every month the balance is topped up to $3.50 for free, an enabled scheme costs $0.0042 per hour.

Services in this connection

  • Gmail

    Start a scheme on every new Gmail email: send an alert to Telegram, save it to a spreadsheet or let an AI read it. No code, free balance every month.

  • Notion

    Connect Notion without code: leads and notes go into a database, rows are found with a filter and text is added to a page. Free balance every month, no card needed.

Similar integrations

  • Gmail + amoCRM

    An email with a lead in Gmail becomes an amoCRM deal by itself: ChatGPT pulls the client name, phone and email out of the text. No code, free balance every month.

  • Gmail + Discord

    New Gmail emails arrive as messages from your bot in a Discord channel, with the sender, subject and start of the text. Gmail search filter, no code, free balance.

  • Gmail + Google Sheets

    Every new Gmail email becomes a row in Google Sheets, with the sender, subject, date and start of the text in their own columns. Free balance monthly, no card needed.

  • Gmail + OpenAI (ChatGPT)

    ChatGPT reads every new Gmail email: writes a summary, sets a category or drafts a reply and sends the result to Telegram or a sheet. No code, free balance monthly.

  • Gmail + Slack

    Every new Gmail email arrives as a message in a Slack channel, with the sender, subject and start of the text. Gmail search filter, no code, free balance monthly.

  • Gmail + Telegram

    Get new Gmail emails as Telegram messages: sender, subject and text in your private chat or a team group. Free balance every month, no card needed.

Frequently asked questions

Each email takes four basic block runs: the Gmail trigger counts as two and creating the Notion row as two more. 1,000 runs cost $1, and a request that Notion answered with an error is not charged. While the scheme is on, it also costs $0.0042 per hour, and a month without turning it off uses most of the free $3.50 on those hours.

Open error_message of the Notion block. object_not_found means the integration was not added under Connections of the database or the link does not point to a database. unauthorized means the token was copied wrong. If a column from the list is missing, the block lists the columns the database has. If the log has no run at all, the email did not match the Gmail search or is not in the Inbox.

A long paragraph is fine: the block cuts the text into parts of 2000 characters, as Notion requires. The number of lines is what matters: every non-empty line of the email becomes a paragraph, and one run can add at most 100 paragraphs and blocks. With more lines the block fails and no row appears. For long emails use snippet and read the full text in Gmail.

Yes. A first Notion block with query_database looks for a row with the same thread_id: write an equals condition on the Thread column into the filter JSON and put thread_id from the trigger into it. A condition block checks that total_count is above 0. If a row exists, append_blocks adds the email to its page by the id from records, otherwise create_page makes a new row. Such an email costs six basic runs.

Yes. In create_page leave the database field empty and fill in the parent page link: each email becomes a page inside it, with the subject as the title and the text below. Such a page has no columns, so keep the properties list empty. To add all emails to one page in a row, choose append_blocks and point it at that page.

Yes. Each new email starts the scheme once, even after a server restart, and emails that were already in the Inbox or arrived more than three days ago do not start it. If Notion asks to wait because of frequent requests, the block waits and retries by itself. Creating a page is not repeated after a network failure, so the database does not get a copy of the row.

Build your first scheme for free

Sign-up is free and needs no card. Every month the balance is topped up to $3.50 for free, enough for about 3,500 runs of basic blocks.

Build it in the builder