How to automate Notion with Integromat for FREE and without coding skills

One of the most anticipated features of notion is the API.

Every day you can find questions about the API on twitter and reddit. And Notion’s response is always “It’s coming soon.”

But it has been “coming soon” for at least 1.5 years now. Perhaps the API really is around the corner, but it could also take another 1.5 years…

Fortunately, you don’t have to wait for Notion. A bunch of smart people have reverse-engineered Notions private API to allow you to create custom automations.

Unfortunately it’s a complicated affaire and only techies with coding skills have been able to take advantage of it.

Until now…

I recently needed to automate a hiring process. So jumped into unofficial API and was able to significantly simplify it.

I created a simple to use integration that you can deploy in just a few minutes and without any coding skills.

You can then use it with automation services like Integromat and Zapier to add new rows to a Notion database.

Keep on reading to see how to set it up step-by-step for free— and without needing a computer science degree.

In this article you’ll learn:

  • What you can do with this unofficial Notion API integration
  • How this setup works
  • Step-By-Step instructions on how to set it up…
    • Step 1: Create your test database
    • Step 2: Deploy the app to Heroku
    • Step 3: Test the Web Hook app
    • Step 4: Automate something with Integromat
  • Conclusion…

 

What you can do with this unofficial Notion API integration

The integration allows you to add a new row to a Notion database in response to some type of event.

For example… my personal use-case is HR.

I need to hire a javascript developer for a project (let me know if you have someone in mind!). On my job description page I have a web form that applicants have to fill out.

And I wanted a new entry to be created in my HR database. The answers should be added to the content of the page with the Markdown formatting preserved. And some of the properties of the database should be automatically pre-filled, such name, email address, and so on.

But I designed it in a flexible way that it could be used for anything. Such as…

  • A task being added to your task list in response to an email
  • A new note being created when someone books an appointment with you
  • Send new product orders directly to notion
  • Add new leads to your CRM or Sales Pipeline in Notion

Anything that can be used as a trigger in Integromat or Zapier, can be used with this integration.

There are a few limitations that you should consider though…

The Web Hook app is not designed to process huge amounts of requests or data. And the unofficial Notion API is rather slow.

So if you are making a few dozen or maybe even a few hundred requests per day, it should be fine. But if you want to process thousands of requests, you may need to tweak the app and the hosting.

 

How this setup works

It’s a pretty simple setup. A lot of things on the internet are connected through something called “Web Hooks”.

A web hook is simply a way for one online service to pass information to another service through a HTTP request.

Both Zapier and Integromat have “Web Hook Triggers”. These hooks can receive information from other services. For example, you can set up a form on your WordPress website or a Typeform to pass on the collected information into Zapier through a Web Hook.

Zapier can then process the information and pass it through another Web Hook on to another service.

The problem is, Notion doesn’t offer any hooks or an official API.

So, to solve this problem, we are going to deploy our OWN Web Hook app that will receive data and then uses the unofficial Notion API to add your content to a Notion database.

At this point it’s important to mention that I am standing on the shoulders of giants and give them a shoutout…

Without them this project wouldn’t have been possible. All I did was to combine all of these solution into a more easy to use package.

But let’s move on to the set up instructions.

Grab a tea, follow along and in less than 30 minutes you’ll have your own automation up and running.

 

Step-By-Step instructions on how to set it up…

 

Step 1: Create your test database

To make it easier for you to follow along, I created a DB that you can find here.

The process will work with any DB, but to make it easier to test the setup, you should visit the DB I created and duplicate the DB into your Notion account.

Once you have duplicated the page, copy the link to the page and store it somewhere. You will need it later.

Step 2: Deploy the app to Heroku

The next step is to set up the Web Hook app that will receive our data from Zapier and add it to the Notion database.

You can find the code for this Web Hook in my github repository: https://github.com/infused-kim/webhook2notion

And we’ll use Heroku to host and deplot it. Heroku is an application hosting service that has a generous free tier.

First, you’ll need to create a Heroku account. Don’t worry, it’s free and doesn’t require a credit card.

Once your account is created, click this button to kick of the install of the Web Hook app…

Deploy

You will need to change these settings…

Your App Name:

It doesn’t really matter what you pick here, but it will end up being part of your app’s URL. Something like your-name-notion-webhook will work.

Region:

It doesn’t really matter. You can just pick the US.

SECRET:

This is the password to authenticate against the Web Hook. Since the Web Hook has access to all your Notion data, we need to make sure that it is password-protected. Otherwise anyone who knows the Web Hook’s URL would be able to add data to your Notion app.

Pick a secure, random password and write it down somewhere safe.

TOKEN:

This is the API token that gives the Web Hook access to your notion account.

You will need to extract it from the cookies of a browser where you are logged into Notion.

  • Log into notion with Chrome (it’s possible with other browsers, but Chrome makes it the easiest)
  • Click the lock icon
  • Select cookies
  • Find the www.notion.so domain and within there the token_v2 cookie
  • Copy the cookie value
  • It’s a very long value. Make sure you copy the entire sequence of numbers and characters.

 

And then deploy the app…

When you have entered all the settings, press the Deploy app button.

It will take a few minutes for Heroku to deploy install all the dependencies and deploy the app.

Step 3: Test the Web Hook app

When the deployment is done a Manage app button will appear. Click it.

On the next screen you will see two buttons in the upper right corner…

Press the Open app button to get the URL of your app. It will be something like https://notion-test-foobar.herokuapp.com/.

Then click on the More button and then select View logs. Here you’ll be able to see what the app is doing and if any errors are happening.

We’ll use restninja.io to send a test request…

First construct the URL of the Web Hook:

  • Take the URL of the app you found above (such as https://notion-test-foobar.herokuapp.com/)
  • Append /add_db_row?secret=PASSWORD-YOU-CHOSE
  • Make sure to replace PASSWORD-YOU-CHOSE with the password you picked during the deployment
  • The final URL should be something like… https://notion-test-foobar.herokuapp.com/add_db_row?secret=super-safe-password
  • Enter it in the field at the top on restninja.io

 

Set the request body

First change the request type from GET to POST in the upper left corner to make the body field appear below it.

Enter the JSON string below in that field…

{
  "db_url": "ADD_DB_URL_HERE",
  "body": "# Description\\nIron Man is a fictional superhero appearing in American comic books published by Marvel Comics. The character was co-created by writer and editor Stan Lee, developed by scripter Larry Lieber, and designed by artists Don Heck and Jack Kirby.",
  "properties": [
    {
      "name": "Name",
      "value": "Tony Stark"
    },
    {
      "name": "Secret Identity",
      "value": "Iron Man"
    },
    {
      "name": "Email",
      "value": "tony@starindustries.com"
    },
    {
      "name": "Universe",
      "value": "Marvel"
    }
  ]
}

This JSON string defines where the new page should be created and what content should be set.

Here’s what the settings do…

  • db_url is the URL of the database you want to add rows too. Get it using the Copy link button in notion
  • body is the content that will be added to the new page. You can use markdown here and \\n for new lines
  • properties can be used to set the columns of the database page. The name value should be the name of the column and the value should be what you want to be written into the column.

If you have never worked with JSON before it can seem overwhelming, but it’s actually quite simple.

It’s just a way to structure data. As long as you keep the structure the same, you will be ok.

Just be mindful that JSON is very particular about formatting. For example, if you forget a , or add one too many, it will be invalid.

You can test your JSON with this jsonlint.com tool. And you can learn more about JSON here.

Send the Web Hook request…

It will take a few seconds for the request to process, but if it was successful, you should see a response like this on the right hand side…

{
  "status": "background_processing",
  "new_row_url": "<https://www.notion.so/5b05647caddd4c0ba46546f87ff93559>"
}

The Web Hook will create a new page in the database, return the link to it and then continue uploading the content and setting the properties.

You can copy the link to visit the page and see the results, or reload the Notion tab with the database to see the new row appearing.

Since the unofficial Notion API is quite slow, the content and properties can take a while to upload. So don’t be surprised if not all the data is in there right away— especially if you add a lot of content to the page.

What if it doesn’t work…

If it doesn’t work, you should see a pretty descriptive error message telling you how to fix the problem.

Step 4: Automate something with Integromat

This is it… you are ready to automate something.

Sign up for an Integromat account.

Zapier is another popular option for this type of automation, but their free version doesn’t support Web Hooks and they make it a little difficult to generate JSON data.

It’s beyond the scope of how to use Integromat, but there are tons of tutorials you can find elsewhere.

Unfortunately Integromat doesn’t allow sharing of workflows, but the screenshots below should you help replicate this…

Trigger (Custom Webhook):

First you need a trigger. In my example I am using another web hook and I pointed the same restninja.io request from above to this web hook.

Parse JSON:

After that we add a Parse JSON step to convert the web hook data into a JSON structure.

This allows us to use the values the hook received in the following steps.

Create MD Body:

This step generates the content of the page. We can mix the values that we got from the Web Hook with Markdown.

The 13. properties[1]: value for example will be replaced with Tony Stark.

Create JSON:

This step creates the JSON that our Notion Web Hook expects. Create the data structure the same way as in the screenshot on the right.

Here it’s important to change the db_url to the URL of your database.

Send to Notion Web Hook:

Conclusion

As you can see, you don’t need to wait for Notion to launch an API. You can already start automating.

If you found this article useful, I’d appreciate if you shared it on social media and perhaps even link to it on your website.

Share this post

Share on facebook
Share on google
Share on twitter
Share on linkedin
Share on pinterest
Share on print
Share on email