<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Infused Insight Blog</title><description>Articles from Infused Insight about analytics, automation, reporting, and operational leverage for Infusionsoft users.</description><link>https://infusedinsight.com/</link><language>en-us</language><item><title>How to automate Notion with Integromat for FREE and without coding skills</title><link>https://infusedinsight.com/blog/how-to-automate-notion-with-integromat-for-free-and-without-coding-skills-137/</link><guid isPermaLink="true">https://infusedinsight.com/blog/how-to-automate-notion-with-integromat-for-free-and-without-coding-skills-137/</guid><description>A step-by-step guide to sending data into a Notion database using Integromat, webhooks, and a small hosted app.</description><pubDate>Mon, 11 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the most anticipated features of Notion is the API.&lt;/p&gt;
&lt;p&gt;Every day you can find questions about the API on Twitter and Reddit. And Notion’s response is always &lt;em&gt;“It’s coming soon.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But it has been &lt;em&gt;“coming soon”&lt;/em&gt; for at least 1.5 years now. Perhaps the API really is around the corner, but it could also take another 1.5 years.&lt;/p&gt;
&lt;p&gt;Fortunately, you don’t have to wait for Notion. A bunch of smart people have reverse-engineered Notion’s private API to allow you to create custom automations.&lt;/p&gt;
&lt;p&gt;Unfortunately, it’s a complicated affair and only techies with coding skills have been able to take advantage of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Until now.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I recently needed to automate a hiring process. So I jumped into the unofficial API and was able to significantly simplify it.&lt;/p&gt;
&lt;p&gt;I created a simple-to-use integration that you can deploy in just a few minutes and without any coding skills.&lt;/p&gt;
&lt;p&gt;You can then use it with automation services like Integromat and Zapier to add new rows to a Notion database.&lt;/p&gt;
&lt;p&gt;Keep on reading to see how to set it up step by step for free and without needing a computer science degree.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this article you’ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What you can do with this unofficial Notion API integration&lt;/li&gt;
&lt;li&gt;How this setup works&lt;/li&gt;
&lt;li&gt;Step-by-step instructions on how to set it up:
&lt;ul&gt;
&lt;li&gt;Step 1: Create your test database&lt;/li&gt;
&lt;li&gt;Step 2: Deploy the app to Heroku&lt;/li&gt;
&lt;li&gt;Step 3: Test the web hook app&lt;/li&gt;
&lt;li&gt;Step 4: Automate something with Integromat&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-you-can-do-with-this-unofficial-notion-api-integration&quot;&gt;What you can do with this unofficial Notion API integration&lt;/h2&gt;
&lt;p&gt;The integration allows you to add a new row to a Notion database in response to some type of event.&lt;/p&gt;
&lt;p&gt;For example, my personal use case is HR.&lt;/p&gt;
&lt;p&gt;I needed to hire a JavaScript developer for a project. On my job description page I have a web form that applicants have to fill out.&lt;/p&gt;
&lt;p&gt;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 as name, email address, and so on.&lt;/p&gt;
&lt;p&gt;But I designed it in a flexible way that it could be used for anything, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A task being added to your task list in response to an email&lt;/li&gt;
&lt;li&gt;A new note being created when someone books an appointment with you&lt;/li&gt;
&lt;li&gt;Send new product orders directly to Notion&lt;/li&gt;
&lt;li&gt;Add new leads to your CRM or sales pipeline in Notion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anything that can be used as a trigger in Integromat or Zapier can be used with this integration.&lt;/p&gt;
&lt;p&gt;There are a few limitations that you should consider though.&lt;/p&gt;
&lt;p&gt;The web hook app is not designed to process huge amounts of requests or data. And the unofficial Notion API is rather slow.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2 id=&quot;how-this-setup-works&quot;&gt;How this setup works&lt;/h2&gt;
&lt;p&gt;It’s a pretty simple setup. A lot of things on the internet are connected through something called “web hooks.”&lt;/p&gt;
&lt;p&gt;A web hook is simply a way for one online service to pass information to another service through an HTTP request.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Zapier can then process the information and pass it through another web hook on to another service.&lt;/p&gt;
&lt;p&gt;The problem is, Notion doesn’t offer any hooks or an official API.&lt;/p&gt;
&lt;p&gt;So, to solve this problem, we are going to deploy our own web hook app that will receive data and then use the unofficial Notion API to add your content to a Notion database.&lt;/p&gt;
&lt;p&gt;At this point it’s important to mention that I am standing on the shoulders of giants and give them a shoutout:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jamie Alexandre for creating the &lt;a href=&quot;https://github.com/jamalex/notion-py&quot;&gt;unofficial Python Notion API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cobertos / Samantha for writing the code to &lt;a href=&quot;https://github.com/Cobertos/md2notion&quot;&gt;convert Markdown data to Notion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dan Carmel for creating a &lt;a href=&quot;https://github.com/dancarmel/webhook2notion&quot;&gt;web hook app that allows you to pass data on to Notion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without them this project wouldn’t have been possible. All I did was combine all of these solutions into a more easy-to-use package.&lt;/p&gt;
&lt;p&gt;But let’s move on to the setup instructions.&lt;/p&gt;
&lt;p&gt;Grab a tea, follow along, and in less than 30 minutes you’ll have your own automation up and running.&lt;/p&gt;
&lt;h2 id=&quot;step-by-step-instructions-on-how-to-set-it-up&quot;&gt;Step-by-step instructions on how to set it up&lt;/h2&gt;
&lt;h3 id=&quot;step-1-create-your-test-database&quot;&gt;Step 1: Create your test database&lt;/h3&gt;
&lt;p&gt;To make it easier for you to follow along, &lt;a href=&quot;https://www.notion.so/5a9bc2da6ea249dda8b17209db04e139&quot;&gt;I created a database that you can find here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The process will work with any database, but to make it easier to test the setup, you should visit the database I created and duplicate it into your Notion account.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Example Notion database used for the webhook test.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2008px) 2008px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2008&quot; height=&quot;626&quot; src=&quot;/_astro/webhook2notion-example-db.CavreU-n_24MdrU.webp&quot; srcset=&quot;/_astro/webhook2notion-example-db.CavreU-n_Z1t1QF4.webp 640w, /_astro/webhook2notion-example-db.CavreU-n_1CDuJ8.webp 750w, /_astro/webhook2notion-example-db.CavreU-n_Zk6XAQ.webp 828w, /_astro/webhook2notion-example-db.CavreU-n_I0vK5.webp 1080w, /_astro/webhook2notion-example-db.CavreU-n_23U6NY.webp 1280w, /_astro/webhook2notion-example-db.CavreU-n_Z1aPP5Y.webp 1668w, /_astro/webhook2notion-example-db.CavreU-n_24MdrU.webp 2008w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once you have duplicated the page, copy the link to the page and store it somewhere. You will need it later.&lt;/p&gt;
&lt;h3 id=&quot;step-2-deploy-the-app-to-heroku&quot;&gt;Step 2: Deploy the app to Heroku&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;You can find the code for this web hook in my GitHub repository: &lt;a href=&quot;https://github.com/infused-kim/webhook2notion&quot;&gt;https://github.com/infused-kim/webhook2notion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And we’ll use Heroku to host and deploy it. Heroku is an application hosting service that has a generous free tier.&lt;/p&gt;
&lt;p&gt;First, you’ll need to create a Heroku account. Don’t worry, it’s free and doesn’t require a credit card.&lt;/p&gt;
&lt;p&gt;Once your account is created, click this button to kick off the install of the web hook app:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://heroku.com/deploy?template=https://github.com/infused-kim/webhook2notion&quot;&gt;Deploy to Heroku&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You will need to change these settings:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your app name:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It doesn’t really matter what you pick here, but it will end up being part of your app’s URL. Something like &lt;code&gt;your-name-notion-webhook&lt;/code&gt; will work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Region:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It doesn’t really matter. You can just pick the US.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SECRET:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Pick a secure, random password and write it down somewhere safe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TOKEN:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the API token that gives the web hook access to your Notion account.&lt;/p&gt;
&lt;p&gt;You will need to extract it from the cookies of a browser where you are logged into Notion.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome cookies view showing where to find the Notion token value.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1910px) 1910px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1910&quot; height=&quot;1180&quot; src=&quot;/_astro/get-notion-api-token.ClP2byNW_1DbFVW.webp&quot; srcset=&quot;/_astro/get-notion-api-token.ClP2byNW_Z1nrnDE.webp 640w, /_astro/get-notion-api-token.ClP2byNW_EuQhC.webp 750w, /_astro/get-notion-api-token.ClP2byNW_Z16464V.webp 828w, /_astro/get-notion-api-token.ClP2byNW_Z2mhH35.webp 1080w, /_astro/get-notion-api-token.ClP2byNW_Z21aJHF.webp 1280w, /_astro/get-notion-api-token.ClP2byNW_1C6a0I.webp 1668w, /_astro/get-notion-api-token.ClP2byNW_1DbFVW.webp 1910w&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Log into Notion with Chrome. It’s possible with other browsers, but Chrome makes it the easiest.&lt;/li&gt;
&lt;li&gt;Click the lock icon.&lt;/li&gt;
&lt;li&gt;Select cookies.&lt;/li&gt;
&lt;li&gt;Find the &lt;a href=&quot;http://www.notion.so&quot;&gt;www.notion.so&lt;/a&gt; domain and within there the &lt;code&gt;token_v2&lt;/code&gt; cookie.&lt;/li&gt;
&lt;li&gt;Copy the cookie value.&lt;/li&gt;
&lt;li&gt;It’s a &lt;em&gt;very&lt;/em&gt; long value. Make sure you copy the entire sequence of numbers and characters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;And then deploy the app.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When you have entered all the settings, press the &lt;code&gt;Deploy app&lt;/code&gt; button.&lt;/p&gt;
&lt;p&gt;It will take a few minutes for Heroku to install all the dependencies and deploy the app.&lt;/p&gt;
&lt;h3 id=&quot;step-3-test-the-web-hook-app&quot;&gt;Step 3: Test the web hook app&lt;/h3&gt;
&lt;p&gt;When the deployment is done, a &lt;code&gt;Manage app&lt;/code&gt; button will appear. Click it.&lt;/p&gt;
&lt;p&gt;On the next screen you will see two buttons in the upper right corner.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Heroku app controls showing the Open app and View logs options.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 476px) 476px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;476&quot; height=&quot;542&quot; src=&quot;/_astro/heroku-open-app-view-logs.By5sm-vR_1m0P1Y.webp&quot; srcset=&quot;/_astro/heroku-open-app-view-logs.By5sm-vR_1m0P1Y.webp 476w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Press the &lt;code&gt;Open app&lt;/code&gt; button to get the URL of your app. It will be something like &lt;code&gt;https://notion-test-foobar.herokuapp.com/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then click on the &lt;code&gt;More&lt;/code&gt; button and then select &lt;code&gt;View logs&lt;/code&gt;. Here you’ll be able to see what the app is doing and if any errors are happening.&lt;/p&gt;
&lt;p&gt;We’ll use &lt;a href=&quot;http://restninja.io/&quot;&gt;restninja.io&lt;/a&gt; to send a test request.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First construct the URL of the web hook:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take the URL of the app you found above, such as &lt;code&gt;https://notion-test-foobar.herokuapp.com/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Append &lt;code&gt;/add_db_row?secret=PASSWORD-YOU-CHOSE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure to replace &lt;code&gt;PASSWORD-YOU-CHOSE&lt;/code&gt; with the password you picked during the deployment.&lt;/li&gt;
&lt;li&gt;The final URL should be something like &lt;code&gt;https://notion-test-foobar.herokuapp.com/add_db_row?secret=super-safe-password&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter it in the field at the top on &lt;a href=&quot;http://restninja.io&quot;&gt;restninja.io&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Set the request body.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First change the request type from &lt;code&gt;GET&lt;/code&gt; to &lt;code&gt;POST&lt;/code&gt; in the upper left corner to make the &lt;code&gt;body&lt;/code&gt; field appear below it.&lt;/p&gt;
&lt;p&gt;Enter the JSON string below in that field:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;db_url&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;ADD_DB_URL_HERE&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;# Description&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Iron 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.&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;properties&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;value&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Tony Stark&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Secret Identity&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;value&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Iron Man&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Email&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;value&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tony@starindustries.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Universe&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;value&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Marvel&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This JSON string defines where the new page should be created and what content should be set.&lt;/p&gt;
&lt;p&gt;Here’s what the settings do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;db_url&lt;/code&gt; is the URL of the database you want to add rows to. Get it using the &lt;code&gt;Copy link&lt;/code&gt; button in Notion.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;body&lt;/code&gt; is the content that will be added to the new page. You can use Markdown here and &lt;code&gt;\n&lt;/code&gt; for new lines.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;properties&lt;/code&gt; can be used to set the columns of the database page. The &lt;code&gt;name&lt;/code&gt; value should be the name of the column and the &lt;code&gt;value&lt;/code&gt; should be what you want to be written into the column.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have never worked with JSON before it can seem overwhelming, but it’s actually quite simple.&lt;/p&gt;
&lt;p&gt;It’s just a way to structure data. As long as you keep the structure the same, you will be ok.&lt;/p&gt;
&lt;p&gt;Just be mindful that JSON is very particular about formatting. For example, if you forget a &lt;code&gt;,&lt;/code&gt; or add one too many, it will be invalid.&lt;/p&gt;
&lt;p&gt;You can test your JSON with this &lt;a href=&quot;http://jsonlint.com/&quot;&gt;jsonlint.com&lt;/a&gt; tool. And you can &lt;a href=&quot;https://www.w3schools.com/whatis/whatis_json.asp&quot;&gt;learn more about JSON here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Send the web hook request.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;background_processing&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;new_row_url&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&amp;#x3C;https://www.notion.so/5b05647caddd4c0ba46546f87ff93559&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Example Notion database after the webhook created a new row.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1615px) 1615px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1615&quot; height=&quot;591&quot; src=&quot;/_astro/webhook2notion-example-db-executed.D4qy7-kV_Z1d6Xbw.webp&quot; srcset=&quot;/_astro/webhook2notion-example-db-executed.D4qy7-kV_Z1jflDg.webp 640w, /_astro/webhook2notion-example-db-executed.D4qy7-kV_6TImK.webp 750w, /_astro/webhook2notion-example-db-executed.D4qy7-kV_Z1Jw3Jc.webp 828w, /_astro/webhook2notion-example-db-executed.D4qy7-kV_Z1YJrxM.webp 1080w, /_astro/webhook2notion-example-db-executed.D4qy7-kV_3sDRw.webp 1280w, /_astro/webhook2notion-example-db-executed.D4qy7-kV_Z1d6Xbw.webp 1615w&quot;&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What if it doesn’t work?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If it doesn’t work, you should see a pretty descriptive error message telling you how to fix the problem.&lt;/p&gt;
&lt;h3 id=&quot;step-4-automate-something-with-integromat&quot;&gt;Step 4: Automate something with Integromat&lt;/h3&gt;
&lt;p&gt;This is it. You are ready to automate something.&lt;/p&gt;
&lt;p&gt;Sign up for an &lt;a href=&quot;https://www.integromat.com/en/&quot;&gt;Integromat&lt;/a&gt; account.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;It’s beyond the scope of this article to explain how to use Integromat, but there are tons of tutorials you can find elsewhere.&lt;/p&gt;
&lt;p&gt;Unfortunately, Integromat doesn’t allow sharing of workflows, but the screenshots below should help you replicate this:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A complete Integromat scenario connecting a webhook trigger through JSON and Markdown creation steps.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2624px) 2624px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2624&quot; height=&quot;702&quot; src=&quot;/_astro/webhook2notion-integromat-all.C00WQulr_Pd1VY.webp&quot; srcset=&quot;/_astro/webhook2notion-integromat-all.C00WQulr_Z1tVsfg.webp 640w, /_astro/webhook2notion-integromat-all.C00WQulr_2maqcG.webp 750w, /_astro/webhook2notion-integromat-all.C00WQulr_1djcqm.webp 828w, /_astro/webhook2notion-integromat-all.C00WQulr_ZYHWaI.webp 1080w, /_astro/webhook2notion-integromat-all.C00WQulr_Z2gFhV2.webp 1280w, /_astro/webhook2notion-integromat-all.C00WQulr_Z2rQwaP.webp 1668w, /_astro/webhook2notion-integromat-all.C00WQulr_1nI6HR.webp 2048w, /_astro/webhook2notion-integromat-all.C00WQulr_1SoQgs.webp 2560w, /_astro/webhook2notion-integromat-all.C00WQulr_Pd1VY.webp 2624w&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger (custom webhook):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First you need a trigger. In my example I am using another web hook and I pointed the same &lt;a href=&quot;http://restninja.io&quot;&gt;restninja.io&lt;/a&gt; request from above to this web hook.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parse JSON:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Integromat Parse JSON module configuration.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1770px) 1770px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1770&quot; height=&quot;844&quot; src=&quot;/_astro/webhook2notion-integromat-json.K6Y5LdZR_Z17uw26.webp&quot; srcset=&quot;/_astro/webhook2notion-integromat-json.K6Y5LdZR_ZKFCyc.webp 640w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_K142W.webp 750w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_1GaoK7.webp 828w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_11QPmk.webp 1080w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_LEqaa.webp 1280w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_Z2uTjVI.webp 1668w, /_astro/webhook2notion-integromat-json.K6Y5LdZR_Z17uw26.webp 1770w&quot;&gt;&lt;/p&gt;
&lt;p&gt;After that we add a &lt;code&gt;Parse JSON&lt;/code&gt; step to convert the web hook data into a JSON structure.&lt;/p&gt;
&lt;p&gt;This allows us to use the values the hook received in the following steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create MD body:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Integromat text aggregator module used to create the Markdown body.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1758px) 1758px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1758&quot; height=&quot;636&quot; src=&quot;/_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_Z2mH08L.webp&quot; srcset=&quot;/_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_zalK7.webp 640w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_2milGr.webp 750w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_1Wh2GV.webp 828w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_ZbAx8u.webp 1080w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_Z1M5h4P.webp 1280w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_Z1zfTsW.webp 1668w, /_astro/webhook2notion-integromat-create-md-body.Cp1NaTyx_Z2mH08L.webp 1758w&quot;&gt;&lt;/p&gt;
&lt;p&gt;This step generates the content of the page. We can mix the values that we got from the web hook with Markdown.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;13. properties[1]: value&lt;/code&gt; for example will be replaced with &lt;code&gt;Tony Stark&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create JSON:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Integromat JSON creation step for the Notion webhook payload.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2064px) 2064px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2064&quot; height=&quot;1582&quot; src=&quot;/_astro/webhook2notion-integromat-create-json.CD64UbPI_Z1UuUzf.webp&quot; srcset=&quot;/_astro/webhook2notion-integromat-create-json.CD64UbPI_12Slpo.webp 640w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_1EaOuN.webp 750w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_Z10VfkA.webp 828w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_2jYRcg.webp 1080w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_Z1rawxN.webp 1280w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_1UpwPJ.webp 1668w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_2rowu9.webp 2048w, /_astro/webhook2notion-integromat-create-json.CD64UbPI_Z1UuUzf.webp 2064w&quot;&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Here it’s important to change the &lt;code&gt;db_url&lt;/code&gt; to the URL of your database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Send to Notion web hook:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Integromat HTTP module sending the final payload to the Notion webhook.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1216px) 1216px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1216&quot; height=&quot;1424&quot; src=&quot;/_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_288b0x.webp&quot; srcset=&quot;/_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_1tAmYx.webp 640w, /_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_WQbWN.webp 750w, /_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_Z22d4Td.webp 828w, /_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_Z13vnvV.webp 1080w, /_astro/webhook2notion-integromat-send-hook.Bfc4LfR0_288b0x.webp 1216w&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;As you can see, you don’t need to wait for Notion to launch an API. You can already start automating.&lt;/p&gt;
&lt;p&gt;If you found this article useful, I’d appreciate it if you shared it on social media and perhaps even linked to it on your website.&lt;/p&gt;
</content:encoded><category>Notion</category><category>Integromat</category><category>Automation</category><author>Kim Streich</author></item></channel></rss>