<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jeremy Reevese</title>
    <description>The latest articles on Forem by Jeremy Reevese (@cheungmanyung).</description>
    <link>https://forem.com/cheungmanyung</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png</url>
      <title>Forem: Jeremy Reevese</title>
      <link>https://forem.com/cheungmanyung</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cheungmanyung"/>
    <language>en</language>
    <item>
      <title>💡 Ever tried to “optimize your life” so hard that you accidentally optimized yourself into existential crisis?
💾 I went deep into automation, AI workflows, and personal systems—not because I’m productive, but because I’m tired.
🔥 Here are my notes from</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Mon, 17 Nov 2025 04:07:07 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/ever-tried-to-optimize-your-life-so-hard-that-you-accidentally-optimized-yourself-into-4m2</link>
      <guid>https://forem.com/cheungmanyung/ever-tried-to-optimize-your-life-so-hard-that-you-accidentally-optimized-yourself-into-4m2</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/cheungmanyung" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" alt="cheungmanyung"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/cheungmanyung/when-your-automation-workflow-becomes-your-full-time-job-and-you-dont-get-paid-for-it-4acj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;When Your Automation Workflow Becomes Your Full-Time Job (And You Don’t Get Paid For It)&lt;/h2&gt;
      &lt;h3&gt;Jeremy Reevese ・ Nov 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>When Your Automation Workflow Becomes Your Full-Time Job (And You Don’t Get Paid For It)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Mon, 17 Nov 2025 04:06:23 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/when-your-automation-workflow-becomes-your-full-time-job-and-you-dont-get-paid-for-it-4acj</link>
      <guid>https://forem.com/cheungmanyung/when-your-automation-workflow-becomes-your-full-time-job-and-you-dont-get-paid-for-it-4acj</guid>
      <description>&lt;p&gt;I built my first Zapier workflow because I wanted to save time.&lt;/p&gt;

&lt;p&gt;Now I have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;19 workflows&lt;/li&gt;
&lt;li&gt;4 broken triggers&lt;/li&gt;
&lt;li&gt;3 unstable tokens&lt;/li&gt;
&lt;li&gt;1 webhook that only runs when I’m not looking&lt;/li&gt;
&lt;li&gt;and the unshakable suspicion that I’m now just working for Zapier, unpaid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Welcome to automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rule #1: The Automation Always Works Until You Need It To
&lt;/h2&gt;

&lt;p&gt;Automation never breaks when you’re testing.&lt;br&gt;
 It only breaks when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A client is waiting&lt;/li&gt;
&lt;li&gt;You're traveling&lt;/li&gt;
&lt;li&gt;You're bragging about it to a friend&lt;/li&gt;
&lt;li&gt;Or it's just been running perfectly for 3 months and decides it deserves a vacation&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Rule #2: OAuth Expiration Is the Final Boss of Solopreneurship
&lt;/h2&gt;

&lt;p&gt;I have fought API keys.&lt;br&gt;
 I have fought rate limits.&lt;br&gt;
 I have fought Notion’s “internal server error” with the calmness of a monk.&lt;/p&gt;

&lt;p&gt;But OAuth token refresh?&lt;br&gt;
 That one broke me spiritually.&lt;/p&gt;


&lt;h2&gt;
  
  
  Rule #3: Every Automation System Can Be Classified Into Two Stages
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;“This is amazing I am a genius”&lt;/li&gt;
&lt;li&gt;“Why did I ever do this everything ispain”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is no Stage 3.&lt;/p&gt;


&lt;h2&gt;
  
  
  Tech Stack? They Asked Me About My Tech Stack?
&lt;/h2&gt;

&lt;p&gt;Okay here it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Notion API
FastAPI
Make (formerly Integromat)
Zapier
GitHub Actions
Python scripts I refuse to document
Cron jobs I forgot exist
One workflow that only runs if the moon is in retrograde
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yes, it is technically “working.”&lt;br&gt;
 No, I do not trust it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Automation Was the Anxiety We Made Along the Way
&lt;/h2&gt;

&lt;p&gt;Everyone talks about saving 10 hours per month through automation.&lt;br&gt;
 Nobody talks about losing 10 hours trying to debug a Make scenario you don’t remember creating.&lt;/p&gt;

&lt;p&gt;But honestly?&lt;br&gt;
 I’d still choose this over manually copying data between Google Sheets.&lt;/p&gt;

&lt;p&gt;Because if my life is going to be chaos either way—&lt;br&gt;
 at least this version of chaos feels like engineering.&lt;/p&gt;




&lt;h1&gt;
  
  
  🏷 Hashtags
&lt;/h1&gt;

&lt;p&gt;#Automation #Zapier #Make #NotionAPI #SolopreneurDev #TechHumor #APIFirst&lt;/p&gt;




</description>
      <category>api</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>📁 Need your Notion data in a real CSV file?
This tiny Python script fetches your database and exports it cleanly — perfect for dashboards, reporting, and automations.
Beginner-friendly, instantly practical.</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 13:11:51 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/need-your-notion-data-in-a-real-csv-file-this-tiny-python-script-fetches-your-database-and-5125</link>
      <guid>https://forem.com/cheungmanyung/need-your-notion-data-in-a-real-csv-file-this-tiny-python-script-fetches-your-database-and-5125</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc" class="crayons-story__hidden-navigation-link"&gt;How I Sync Notion CSV Using Python (Beginner-Friendly)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/cheungmanyung" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" alt="cheungmanyung profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/cheungmanyung" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jeremy Reevese
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jeremy Reevese
                
              
              &lt;div id="story-author-preview-content-3022108" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/cheungmanyung" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jeremy Reevese&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Nov 14 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc" id="article-link-3022108"&gt;
          How I Sync Notion CSV Using Python (Beginner-Friendly)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>python</category>
      <category>automation</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🧠 Running a one-person company means building systems, not doing tasks.
Here’s my entire 2025 automation stack — Python, Notion API, n8n, GitHub Actions, and tiny tools that keep my solo business alive.
Simple, scalable, and hireless.</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 13:10:52 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/running-a-one-person-company-means-building-systems-not-doing-tasks-heres-my-entire-2025-cdg</link>
      <guid>https://forem.com/cheungmanyung/running-a-one-person-company-means-building-systems-not-doing-tasks-heres-my-entire-2025-cdg</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/cheungmanyung" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" alt="cheungmanyung"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/cheungmanyung/my-one-person-company-automation-stack-2025-edition-2faa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;My One-Person Company Automation Stack (2025 Edition)&lt;/h2&gt;
      &lt;h3&gt;Jeremy Reevese ・ Nov 14&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#notion&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#automation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>python</category>
      <category>notion</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🚀 Trying to automate your day?
Here’s a tiny Python script that writes your daily report straight into Notion — minimal code, zero friction, instantly useful.
A perfect first building block for your automation toolkit.</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:56:16 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/trying-to-automate-your-day-heres-a-tiny-python-script-that-writes-your-daily-report-straight-2p87</link>
      <guid>https://forem.com/cheungmanyung/trying-to-automate-your-day-heres-a-tiny-python-script-that-writes-your-daily-report-straight-2p87</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/cheungmanyung" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" alt="cheungmanyung"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/cheungmanyung/build-a-daily-report-generator-using-python-notion-api-minimal-working-example-3lek" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Build a Daily Report Generator Using Python + Notion API (Minimal Working Example)&lt;/h2&gt;
      &lt;h3&gt;Jeremy Reevese ・ Nov 14&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>python</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>In this post, I'll show exactly how I use GitHub Actions as a free, always-on automation engine to support my daily routines, my internal tools, and my one-person company’s operations.</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:49:43 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/in-this-post-ill-show-exactly-how-i-use-github-actions-as-a-free-always-on-automation-engine-to-1kmp</link>
      <guid>https://forem.com/cheungmanyung/in-this-post-ill-show-exactly-how-i-use-github-actions-as-a-free-always-on-automation-engine-to-1kmp</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han" class="crayons-story__hidden-navigation-link"&gt;How I Use GitHub Actions to Automate My Life (and My One-Person Company)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/cheungmanyung" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" alt="cheungmanyung profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/cheungmanyung" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jeremy Reevese
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jeremy Reevese
                
              
              &lt;div id="story-author-preview-content-3022136" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/cheungmanyung" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3610768%2Fe78a990a-f83a-41cf-a3d4-3ec96301ca60.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jeremy Reevese&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Nov 14 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han" id="article-link-3022136"&gt;
          How I Use GitHub Actions to Automate My Life (and My One-Person Company)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/github"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;github&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>productivity</category>
      <category>automation</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>How I Use GitHub Actions to Automate My Life (and My One-Person Company)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:48:50 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han</link>
      <guid>https://forem.com/cheungmanyung/how-i-use-github-actions-to-automate-my-life-and-my-one-person-company-3han</guid>
      <description>&lt;p&gt;If you run a one-person company, you quickly learn a simple truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You’re always understaffed.&lt;br&gt;
Automation is your only employee.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GitHub Actions has become one of my most reliable tools—not for CI/CD, not for deployments, but for &lt;strong&gt;running my life and my workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this post, I'll show exactly how I use GitHub Actions as a free, always-on automation engine to support my daily routines, my internal tools, and my one-person company’s operations.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why GitHub Actions Works So Well for Solo Developers
&lt;/h1&gt;

&lt;p&gt;GitHub Actions is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;free&lt;/li&gt;
&lt;li&gt;cloud-based&lt;/li&gt;
&lt;li&gt;reliable&lt;/li&gt;
&lt;li&gt;cron-capable&lt;/li&gt;
&lt;li&gt;easy to version-control&lt;/li&gt;
&lt;li&gt;available 24/7&lt;/li&gt;
&lt;li&gt;runs Python beautifully&lt;/li&gt;
&lt;li&gt;great for small periodic jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a solo developer, this makes it &lt;em&gt;perfect&lt;/em&gt; as a personal automation engine.&lt;/p&gt;

&lt;p&gt;Most people use it for CI/CD.&lt;/p&gt;

&lt;p&gt;I use it to run my life.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Automate with GitHub Actions
&lt;/h1&gt;

&lt;p&gt;Here’s my 2025 schedule of automations:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Daily&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate Notion daily report&lt;/li&gt;
&lt;li&gt;Backup Notion → CSV&lt;/li&gt;
&lt;li&gt;Log productivity metrics&lt;/li&gt;
&lt;li&gt;Sync tasks from different databases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Weekly&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Weekly summary generation (Friday)&lt;/li&gt;
&lt;li&gt;Back up content drafts&lt;/li&gt;
&lt;li&gt;Update my “Company Operating Log”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Monthly&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Archive old tasks&lt;/li&gt;
&lt;li&gt;Export data snapshots&lt;/li&gt;
&lt;li&gt;Rotate logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Ad-hoc&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Trigger FastAPI microservices&lt;/li&gt;
&lt;li&gt;Trigger n8n workflows&lt;/li&gt;
&lt;li&gt;Run small Python scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub Actions is basically my personal cron server—and it’s 100% free.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example: Daily Report Generator (Python + GitHub Actions)
&lt;/h1&gt;

&lt;p&gt;This is one of my simplest, most useful automations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Folder structure:&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;automation/
  daily_report.py
.github/
  workflows/
    daily-report.yml

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;code&gt;daily_report.py&lt;/code&gt;&lt;/strong&gt; (Minimal Working Example)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;NOTION_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_NOTION_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DATABASE_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DATABASE_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NOTION_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Notion-Version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-06-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_report&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.notion.com/v1/pages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DATABASE_ID&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily Report - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}]&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Created successfully&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;create_report&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;GitHub Actions workflow: &lt;code&gt;.github/workflows/daily-report.yml&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Daily Report&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;  &lt;span class="c1"&gt;# Run every day at 01:00 UTC&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;run-script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up Python&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-python@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;python-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.11"&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install requests&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run script&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;NOTION_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.NOTION_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;DATABASE_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DATABASE_ID }}&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python automation/daily_report.py&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs every morning&lt;/li&gt;
&lt;li&gt;Writes a fresh daily report into Notion&lt;/li&gt;
&lt;li&gt;Requires no server&lt;/li&gt;
&lt;li&gt;Costs $0&lt;/li&gt;
&lt;li&gt;Never forgets to run&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Other Automations I Run
&lt;/h1&gt;

&lt;p&gt;Here are some of the other scripts powered by GitHub Actions in my stack:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ Notion → CSV backup&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Exports Notion database into CSV every midnight.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Weekly summary generator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every Friday, my Python script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fetches Notion logs&lt;/li&gt;
&lt;li&gt;aggregates tasks&lt;/li&gt;
&lt;li&gt;writes a weekly overview&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3️⃣ Personal productivity logger&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tracks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;completed tasks&lt;/li&gt;
&lt;li&gt;time blocks&lt;/li&gt;
&lt;li&gt;work categories&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4️⃣ Triggering n8n workflow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &amp;lt;n8n-webhook&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;5️⃣ FastAPI endpoint tests&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mini-checks to keep microservices alive.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why This Approach Works for a Solo Developer
&lt;/h1&gt;

&lt;p&gt;Because GitHub Actions gives you:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ A free server
&lt;/h3&gt;

&lt;p&gt;No VPS. No maintenance.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ A reliable scheduler
&lt;/h3&gt;

&lt;p&gt;Cron jobs in the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ A version-controlled automation hub
&lt;/h3&gt;

&lt;p&gt;All workflows tracked.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Secure secret storage
&lt;/h3&gt;

&lt;p&gt;Notion API keys stored in GitHub Secrets.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Perfect integration with Python
&lt;/h3&gt;

&lt;p&gt;No “server setup”, just run scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ The mindset shift
&lt;/h3&gt;

&lt;p&gt;You stop doing things manually.&lt;/p&gt;

&lt;p&gt;You start thinking in systems.&lt;/p&gt;




&lt;h1&gt;
  
  
  What’s Next in My Automation Roadmap
&lt;/h1&gt;

&lt;p&gt;In 2025–2026 I plan to automate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoice generation&lt;/li&gt;
&lt;li&gt;Project heatmap analytics&lt;/li&gt;
&lt;li&gt;Automatic content pipeline&lt;/li&gt;
&lt;li&gt;FastAPI service scheduled tasks&lt;/li&gt;
&lt;li&gt;Client updates via email/slack&lt;/li&gt;
&lt;li&gt;AI-assisted knowledge base&lt;/li&gt;
&lt;li&gt;Automated Upwork proposal logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Automation is my second brain, and GitHub Actions is its backbone.&lt;/p&gt;




&lt;h1&gt;
  
  
  If You Want More
&lt;/h1&gt;

&lt;p&gt;I can share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How I manage secrets securely&lt;/li&gt;
&lt;li&gt;How I deploy microservices&lt;/li&gt;
&lt;li&gt;How my Notion → GitHub backup works&lt;/li&gt;
&lt;li&gt;My full “Ops Dashboard” blueprint&lt;/li&gt;
&lt;li&gt;My complete automation folder structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just comment and I’ll write it.&lt;/p&gt;

&lt;p&gt;Thanks for reading — and happy automating! &lt;/p&gt;







</description>
      <category>automation</category>
      <category>github</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My One-Person Company Automation Stack (2025 Edition)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:37:59 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/my-one-person-company-automation-stack-2025-edition-2faa</link>
      <guid>https://forem.com/cheungmanyung/my-one-person-company-automation-stack-2025-edition-2faa</guid>
      <description>&lt;p&gt;&lt;em&gt;How I automate my life, my work, and my one-person company using Python, Notion, GitHub, and no-code tools.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Running a one-person company means wearing all the hats —&lt;/p&gt;

&lt;p&gt;engineering, project management, documentation, business ops, invoicing, marketing, client support…&lt;/p&gt;

&lt;p&gt;But here’s the secret:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I can't automate it, I don't scale it.&lt;br&gt;
If I can automate it, I turn it into a system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Over time, this principle evolved into a real thing:&lt;/p&gt;

&lt;p&gt;my &lt;strong&gt;Automation Stack&lt;/strong&gt; — the infrastructure that keeps my workflow running smoothly without hiring anyone.&lt;/p&gt;

&lt;p&gt;In this post, I’ll break down my 2025 automation setup,&lt;/p&gt;

&lt;p&gt;from foundational tools to the small scripts that quietly keep the company alive.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;1. Core Principles&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Before the tools, here are the rules:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ Keep it minimal&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No complex frameworks. No unnecessary abstractions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Prefer boring tech&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Python requests &amp;gt; five layers of orchestration.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3️⃣ Build for repeatability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every workflow should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logged&lt;/li&gt;
&lt;li&gt;Re-runnable&lt;/li&gt;
&lt;li&gt;Portable&lt;/li&gt;
&lt;li&gt;Easy to debug&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4️⃣ Automate public-first&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If I build something useful for myself,&lt;/p&gt;

&lt;p&gt;I write about it and turn it into an asset (like this post).&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;2. My Automation Stack Overview&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Here’s the 2025 snapshot of my one-person company's system:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tooling&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data &amp;amp; Notes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;Source of truth, project logs, planning, daily reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automation Scripts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python + Notion API&lt;/td&gt;
&lt;td&gt;Daily report generator, database sync, task pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;n8n / Make.com&lt;/td&gt;
&lt;td&gt;Multi-step workflows, API calling, webhook triggers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GitHub Actions&lt;/td&gt;
&lt;td&gt;Scheduled workflows, backups, cron jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev.to + Medium + GitHub&lt;/td&gt;
&lt;td&gt;Public learning, documentation, portfolio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Client-Facing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upwork + LinkedIn&lt;/td&gt;
&lt;td&gt;Social proof, authority building&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nothing fancy, nothing overengineered —&lt;/p&gt;

&lt;p&gt;just tools that carry their weight.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;3. Python: The Heart of My Automations&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I keep Python scripts extremely small and modular.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 My typical script does one thing only:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Write a daily report to Notion&lt;/li&gt;
&lt;li&gt;Export Notion → CSV&lt;/li&gt;
&lt;li&gt;Sync project tasks&lt;/li&gt;
&lt;li&gt;Check deadlines&lt;/li&gt;
&lt;li&gt;Push logs to GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;automation/
  daily_report.py
  notion_to_csv.py
  sync_projects.py
  utils/
    notion.py
    dates.py
    logger.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each file: &amp;lt; 80 lines.&lt;/p&gt;

&lt;p&gt;Each script: callable manually, via cron, or via GitHub Actions.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;4. Notion as My Internal Database&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Notion is my:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRM&lt;/li&gt;
&lt;li&gt;Project tracking&lt;/li&gt;
&lt;li&gt;Daily report log&lt;/li&gt;
&lt;li&gt;Content pipeline&lt;/li&gt;
&lt;li&gt;Idea notebook&lt;/li&gt;
&lt;li&gt;Billing record&lt;/li&gt;
&lt;li&gt;Knowledge hub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every API-connected table becomes a “micro-database”.&lt;/p&gt;

&lt;p&gt;Typical properties I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Created&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Updated&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tags&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Owner&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Priority&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Python → Notion API connects EVERYTHING.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;5. n8n / Make: Multi-Step Workflow Glue&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Not everything needs Python.&lt;/p&gt;

&lt;p&gt;Sometimes the fastest solution is no-code automation.&lt;/p&gt;

&lt;p&gt;My favorite n8n workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listen to a webhook → push to Notion&lt;/li&gt;
&lt;li&gt;Generate a weekly digest → send to email&lt;/li&gt;
&lt;li&gt;Trigger Python scripts via command node&lt;/li&gt;
&lt;li&gt;Transform incoming JSON before storage&lt;/li&gt;
&lt;li&gt;Sync backups to storage buckets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I treat n8n like a “visual cron + API router”.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;6. GitHub Actions as My Scheduler&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I don’t use cron on local machines.&lt;/p&gt;

&lt;p&gt;Instead, I use GitHub Actions to run workflow scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common automations:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Daily report generator (9:00)&lt;/li&gt;
&lt;li&gt;Notion → CSV backup (midnight)&lt;/li&gt;
&lt;li&gt;Weekly summary pipeline (Friday)&lt;/li&gt;
&lt;li&gt;Push logs to GitHub repo daily&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Daily Report&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-python@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;python-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.11'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install -r requirements.txt&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python automation/daily_report.py&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This alone is worth hours every week.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;7. What This Stack Enables&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;⏱️ Time saved per day:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;~1–2 hours&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;💼 Tasks automated:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Daily logs&lt;/li&gt;
&lt;li&gt;Data exporting&lt;/li&gt;
&lt;li&gt;Progress tracking&lt;/li&gt;
&lt;li&gt;Task sorting&lt;/li&gt;
&lt;li&gt;Content scheduling&lt;/li&gt;
&lt;li&gt;Personal analytics&lt;/li&gt;
&lt;li&gt;Client-related paperwork&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📈 Business benefits:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More time for deep work&lt;/li&gt;
&lt;li&gt;More content output&lt;/li&gt;
&lt;li&gt;More proof-of-work for clients&lt;/li&gt;
&lt;li&gt;More reproducible workflows&lt;/li&gt;
&lt;li&gt;A more valuable portfolio&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;8. Why This Works for a One-Person Company&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Because the entire stack is:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Cheap
&lt;/h3&gt;

&lt;p&gt;Most of it is free.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Simple
&lt;/h3&gt;

&lt;p&gt;Small tools that fit together.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Portable
&lt;/h3&gt;

&lt;p&gt;You can move everything to another platform in one weekend.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ Easy to teach
&lt;/h3&gt;

&lt;p&gt;Clients love simple systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔ "Hireless"
&lt;/h3&gt;

&lt;p&gt;Automation is your employee.&lt;/p&gt;

&lt;p&gt;This is &lt;em&gt;exactly&lt;/em&gt; why I chose this tech stack instead of chasing shiny tools.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;9. What’s Coming Next (Open Roadmap)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I'm expanding this stack in 2026–2027 with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI microservices&lt;/li&gt;
&lt;li&gt;LangChain for internal knowledge agents&lt;/li&gt;
&lt;li&gt;A personal “Ops Dashboard” built on Notion&lt;/li&gt;
&lt;li&gt;Automated content distribution pipelines&lt;/li&gt;
&lt;li&gt;A GitHub-hosted data lake&lt;/li&gt;
&lt;li&gt;Client-ready automation templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re curious about any of these, leave a comment and I’ll build the tutorial.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;10. Final Thoughts&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Running a one-person company feels intimidating.&lt;/p&gt;

&lt;p&gt;But once you build the right systems, everything becomes lighter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Less chaos&lt;/li&gt;
&lt;li&gt;More clarity&lt;/li&gt;
&lt;li&gt;More output&lt;/li&gt;
&lt;li&gt;More opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Automation isn’t about replacing yourself —&lt;/p&gt;

&lt;p&gt;it’s about &lt;strong&gt;making space to do the real work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you want breakdowns of any script or workflow in this post,&lt;/p&gt;

&lt;p&gt;tell me which one — I’ll write it.&lt;/p&gt;

</description>
      <category>python</category>
      <category>notion</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Sync Notion CSV Using Python (Beginner-Friendly)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:34:37 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc</link>
      <guid>https://forem.com/cheungmanyung/how-i-sync-notion-csv-using-python-beginner-friendly-5cjc</guid>
      <description>&lt;p&gt;Notion is a great place to organize information, but sometimes you need your data in a &lt;em&gt;real file&lt;/em&gt; — especially when working with spreadsheets, dashboards, BI tools, or automation workflows.&lt;/p&gt;

&lt;p&gt;In this post, I’ll show you how to build a &lt;strong&gt;simple Python script that fetches data from a Notion database and writes it into a CSV file&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a beginner-friendly example, perfect for anyone learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python data handling&lt;/li&gt;
&lt;li&gt;Notion API basics&lt;/li&gt;
&lt;li&gt;Automation workflows&lt;/li&gt;
&lt;li&gt;One-person company internal tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s keep it small, simple, and practical.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What We’re Building
&lt;/h2&gt;

&lt;p&gt;A script that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connects to your Notion API&lt;/li&gt;
&lt;li&gt;Fetches all rows from a Notion database&lt;/li&gt;
&lt;li&gt;Converts them into Python objects&lt;/li&gt;
&lt;li&gt;Writes the results into a CSV file&lt;/li&gt;
&lt;li&gt;Runs in under 1 second&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No frameworks.&lt;/p&gt;

&lt;p&gt;Just &lt;code&gt;requests&lt;/code&gt; + &lt;code&gt;csv&lt;/code&gt; + a few lines of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Requirements
&lt;/h2&gt;

&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Notion API integration&lt;/li&gt;
&lt;li&gt;A shared database&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;NOTION_API_KEY&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The database ID&lt;/li&gt;
&lt;li&gt;Python 3.8+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install the only dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Minimal Working Code Example
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;code&gt;notion_to_csv.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;

&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_NOTION_SECRET_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DATABASE_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DATABASE_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Notion-Version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-06-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_notion_rows&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.notion.com/v1/databases/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DATABASE_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error fetching data:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plain_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Created&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;created_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;write_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notion_export.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DictWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fieldnames&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Created&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeheader&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sync_notion_to_csv&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;raw_rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_notion_rows&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;parsed_rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;parse_row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;raw_rows&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;write_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parsed_rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CSV export completed → notion_export.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;sync_notion_to_csv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📝 How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ Fetch Notion rows&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We use &lt;code&gt;/databases/{id}/query&lt;/code&gt; to pull entries.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Parse Notion properties&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Notion stores data in nested structures — we extract:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Created time&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(You can customize this for your own database.)&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3️⃣ Write to CSV&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Python’s built-in &lt;code&gt;csv&lt;/code&gt; module handles everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  📄 Output Example (notion_export.csv)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Title,Status,Created
Daily Report,Done,2025-01-02T10:12:00Z
Project Setup,In Progress,2025-01-05T14:09:22Z
Idea Notes,Backlog,2025-01-08T09:41:03Z

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs instantly → produces a clean structured CSV.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Why This Script Is Useful
&lt;/h2&gt;

&lt;p&gt;This tiny tool is perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migrating Notion content to other tools&lt;/li&gt;
&lt;li&gt;Exporting weekly or monthly reports&lt;/li&gt;
&lt;li&gt;Syncing data with Excel / Google Sheets&lt;/li&gt;
&lt;li&gt;Feeding data into BI tools&lt;/li&gt;
&lt;li&gt;Automating one-person company dashboards&lt;/li&gt;
&lt;li&gt;Combining with n8n / Make workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can even trigger this script daily via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;cron jobs&lt;/li&gt;
&lt;li&gt;n8n “Execute Command” node&lt;/li&gt;
&lt;li&gt;Make.com shell command module&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small script → real automation value.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Full Repo Coming Soon
&lt;/h2&gt;

&lt;p&gt;I'll publish a full “Notion → CSV Toolkit” on GitHub with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Rich text handling&lt;/li&gt;
&lt;li&gt;Multi-select support&lt;/li&gt;
&lt;li&gt;Date formatting&lt;/li&gt;
&lt;li&gt;Deployment options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;em&gt;(GitHub link placeholder — to be added)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Want More?
&lt;/h2&gt;

&lt;p&gt;Let me know if you'd like tutorials on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sync Notion ↔ Google Sheets&lt;/li&gt;
&lt;li&gt;Notion API + FastAPI microservices&lt;/li&gt;
&lt;li&gt;Notion → JSON pipelines&lt;/li&gt;
&lt;li&gt;n8n workflows using Notion&lt;/li&gt;
&lt;li&gt;Building a one-person company automation layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading — and happy building! 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Build a FastAPI Service in Under 10 Minutes (Perfect for Automation Workflows)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:29:41 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/build-a-fastapi-service-in-under-10-minutes-perfect-for-automation-workflows-2opl</link>
      <guid>https://forem.com/cheungmanyung/build-a-fastapi-service-in-under-10-minutes-perfect-for-automation-workflows-2opl</guid>
      <description>&lt;p&gt;FastAPI is one of the fastest ways to build lightweight, production-ready APIs using Python.&lt;/p&gt;

&lt;p&gt;In this post, I’ll show you how to create a &lt;strong&gt;minimal FastAPI service in under 10 minutes&lt;/strong&gt;, perfect for automation workflows, internal tools, or integrations with platforms like n8n, Make.com, and Zapier.&lt;/p&gt;

&lt;p&gt;This is part of my ongoing effort to &lt;em&gt;build in public&lt;/em&gt; while constructing the technical backbone of my one-person company.&lt;/p&gt;

&lt;p&gt;If you know basic Python, you can follow this — no backend experience required.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What We’re Building
&lt;/h2&gt;

&lt;p&gt;A tiny FastAPI service that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exposes a simple &lt;code&gt;/ping&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;Accepts JSON input&lt;/li&gt;
&lt;li&gt;Returns structured JSON output&lt;/li&gt;
&lt;li&gt;Runs locally or inside n8n / Make webhooks&lt;/li&gt;
&lt;li&gt;Can be deployed later to Fly.io, Render, Vercel, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to create something &lt;strong&gt;simple, reliable, automation-friendly&lt;/strong&gt;, and easily extendable.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Requirements
&lt;/h2&gt;

&lt;p&gt;You’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.8+&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fastapi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uvicorn&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;fastapi uvicorn

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Minimal Working Code Example
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;code&gt;main.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;

&lt;span class="nd"&gt;@app.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/ping&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ok&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FastAPI is running!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/echo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;received&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API is now running at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8000

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try these URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /ping&lt;/code&gt; → Health check&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /echo&lt;/code&gt; with JSON payload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello FastAPI"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll get back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"received"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello FastAPI"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 Why This Tiny Service Is Powerful
&lt;/h2&gt;

&lt;p&gt;Even this minimal version can be used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build automation steps for n8n&lt;/li&gt;
&lt;li&gt;Create custom webhooks for Make.com&lt;/li&gt;
&lt;li&gt;Build simple bots&lt;/li&gt;
&lt;li&gt;Add Python logic to no-code workflows&lt;/li&gt;
&lt;li&gt;Serve as a microservice in your personal stack&lt;/li&gt;
&lt;li&gt;Prototype AI tools&lt;/li&gt;
&lt;li&gt;Power internal dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This small piece becomes the foundation for larger engineering blocks.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Optional: Connecting to n8n or Make.com
&lt;/h2&gt;

&lt;p&gt;If you want to integrate immediately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In n8n:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add an HTTP Request node&lt;/li&gt;
&lt;li&gt;Set method to POST&lt;/li&gt;
&lt;li&gt;URL: &lt;code&gt;http://127.0.0.1:8000/echo&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Send JSON payload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In Make.com:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add an HTTP module&lt;/li&gt;
&lt;li&gt;POST JSON to the same endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instant custom automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Full Code + Future Examples
&lt;/h2&gt;

&lt;p&gt;I’ll publish the full FastAPI template repo (including logging, config, and deployment options) on GitHub soon.&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;(GitHub repo link placeholder — to be added)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Want More Tutorials?
&lt;/h2&gt;

&lt;p&gt;Let me know if you'd like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A FastAPI + Notion API microservice&lt;/li&gt;
&lt;li&gt;A FastAPI + n8n workflow&lt;/li&gt;
&lt;li&gt;Deploying FastAPI to Fly.io / Render&lt;/li&gt;
&lt;li&gt;Turning this into a CLI + API hybrid tool&lt;/li&gt;
&lt;li&gt;Full automation stack breakdown for one-person companies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading — and happy building! 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Build a Daily Report Generator Using Python + Notion API (Minimal Working Example)</title>
      <dc:creator>Jeremy Reevese</dc:creator>
      <pubDate>Fri, 14 Nov 2025 05:17:37 +0000</pubDate>
      <link>https://forem.com/cheungmanyung/build-a-daily-report-generator-using-python-notion-api-minimal-working-example-3lek</link>
      <guid>https://forem.com/cheungmanyung/build-a-daily-report-generator-using-python-notion-api-minimal-working-example-3lek</guid>
      <description>&lt;p&gt;For my first Dev.to post, I wanted to share something small, useful, and immediately applicable — a &lt;strong&gt;minimal Python script that automatically generates a daily report into Notion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is part of my ongoing effort to &lt;em&gt;build in public&lt;/em&gt; while constructing my one-person company’s automation stack.&lt;/p&gt;

&lt;p&gt;If you want a simple, beginner-friendly example of how to interact with the Notion API using Python, this is a great place to start.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What We’re Building
&lt;/h2&gt;

&lt;p&gt;A tiny script that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads your Notion API key&lt;/li&gt;
&lt;li&gt;Writes a new entry into a Notion database&lt;/li&gt;
&lt;li&gt;Automatically fills in today’s date&lt;/li&gt;
&lt;li&gt;Adds a default “Daily Report” template text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No frameworks, no advanced tooling — just pure Python and a few lines of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Requirements
&lt;/h2&gt;

&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Notion API integration&lt;/li&gt;
&lt;li&gt;A database in Notion&lt;/li&gt;
&lt;li&gt;The database’s ID&lt;/li&gt;
&lt;li&gt;Python 3.8+&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;requests&lt;/code&gt; library&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install the dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Minimal Working Code Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_NOTION_SECRET_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DATABASE_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DATABASE_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.notion.com/v1/pages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Notion-Version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-06-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DATABASE_ID&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily Report - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;children&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;block&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;paragraph&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;paragraph&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rich_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Today&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s Summary:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Page created successfully!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📝 How to Use It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a Notion integration&lt;/li&gt;
&lt;li&gt;Share your database with that integration&lt;/li&gt;
&lt;li&gt;Copy your database ID&lt;/li&gt;
&lt;li&gt;Replace the placeholders in the script&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python daily_report.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a newly generated page appear in your Notion database.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Small automation blocks like this are the building pieces of a larger system.&lt;/p&gt;

&lt;p&gt;This script can be extended into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A CLI tool&lt;/li&gt;
&lt;li&gt;A daily cron job&lt;/li&gt;
&lt;li&gt;An n8n / Make workflow&lt;/li&gt;
&lt;li&gt;A FastAPI microservice&lt;/li&gt;
&lt;li&gt;A full productivity dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is how tiny scripts gradually become part of a &lt;strong&gt;one-person company’s technical infrastructure&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Full Source Code
&lt;/h2&gt;

&lt;p&gt;I will upload the improved version + additional examples to GitHub later:&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;(GitHub repo link placeholder — to be added)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 If You Want More
&lt;/h2&gt;

&lt;p&gt;Let me know in the comments if you'd like tutorials on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notion API + Python advanced usage&lt;/li&gt;
&lt;li&gt;Building automations for freelancers&lt;/li&gt;
&lt;li&gt;n8n workflows&lt;/li&gt;
&lt;li&gt;FastAPI microservices&lt;/li&gt;
&lt;li&gt;GitHub Actions for productivity&lt;/li&gt;
&lt;li&gt;One-person company engineering systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the first post of many — thanks for reading, and happy building! 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
