The $0 CRM Problem Every Freelancer Ignores

I once spent 40 minutes on a Sunday manually copying six Stripe payments into a Notion table. That's the moment I decided to never do it again.

If you run a solo business — consulting, a SaaS, digital products — Stripe is probably your payment layer and Notion is probably where you track clients. But the two don't talk to each other out of the box. So payments pile up in Stripe's dashboard while your Notion CRM sits stale. You lose context. You miss follow-ups. You look unprofessional.

Here's the fix: a Make.com scenario that watches Stripe for new payments and instantly creates or updates a record in your Notion database. No code. No Zapier tax. Runs forever.

What You Need Before You Build

Three things. That's it.

Set up the Notion database first. The schema matters — Make.com maps fields one-to-one, so sloppy column types cause silent failures.

Pro tip: Add a "Source" select field to your Notion database with options like "Stripe", "Invoice", "Manual". It costs nothing and makes filtering your CRM 10x more useful later.

Building the Scenario Step by Step

  1. Create a new scenario in Make.com. Click "Create a new scenario" from your dashboard. Search for Stripe as your trigger module.
  2. Set the trigger to "Watch Events." Choose the Watch Events module from Stripe. Connect your Stripe account via OAuth. Set the event type to payment_intent.succeeded — this fires the moment a payment clears.
  3. Add a Notion module. Click the + icon after the Stripe trigger. Search for Notion and choose Create a Database Item.
  4. Map the Stripe fields to Notion. This is where the magic happens. Map customer_email → Email, amount → Amount (divide by 100 — Stripe sends cents), created → Payment Date (use Make's formatDate function to convert the Unix timestamp), id → Stripe Payment ID, and set Status to "Paid" as a static value.
  5. Handle the customer name. Stripe doesn't always include a name on the payment intent itself. Add a second Stripe module — Retrieve a Customer — between the trigger and the Notion step. Pass the customer ID from the payment intent. Now you can map name cleanly into Notion's title field.
  6. Test with a real Stripe test-mode payment. Use Stripe's test card 4242 4242 4242 4242 to fire a dummy payment. Confirm the Notion record appears correctly.
  7. Turn the scenario on. Toggle it to active. Make.com will now poll Stripe every 15 minutes on the Core plan, or near-instantly if you upgrade to a webhook-based trigger on higher tiers.
Pro tip: Use Make.com's built-in error handler on the Notion module. Set it to "Resume" with a fallback route that sends you a Slack or email alert if a Notion write fails. Silent failures are the enemy of any automation you trust with money.

Polling vs. Webhooks: Which Should You Use?

Method Speed Make.com Plan Needed Best For
Polling (Watch Events) Up to 15-min delay Core ($9/mo) Low-volume businesses, building/testing
Instant Webhook Seconds Pro ($16/mo) or higher High-volume or real-time CRM needs

For most freelancers handling under 50 payments a month, polling is perfectly fine. A 15-minute lag before a Notion record appears won't hurt your business. If you're running a SaaS with dozens of daily signups, the Pro plan's instant webhooks are worth the extra $7.

What to Build on Top of This

Once payments are flowing into Notion, the second layer of automation gets interesting.

Add a filter in Make.com: if amount > 50000 (that's $500 in cents), fire a separate notification to your phone via Pushover or a Slack DM. High-value client just paid? You want to know immediately.

You can also extend the scenario to check whether the customer already exists in your Notion CRM before creating a new entry. Use Make.com's Notion Search Objects module, query by email, and route: if found → update the existing record; if not found → create a new one. Clean database, no duplicates.

That duplicate-check step alone makes this feel like a real CRM instead of a glorified log.

FAQ

Does this work with Stripe subscriptions, not just one-time payments?

Yes. Swap the trigger event to invoice.payment_succeeded instead of payment_intent.succeeded. The field mapping changes slightly — use customer_email from the invoice object — but the logic is identical.

What happens if Make.com is down when a payment comes in?

Make.com queues missed events and processes them when service resumes. For critical workflows, enable the "Incomplete executions" setting in your scenario so nothing gets silently dropped.

Is 10,000 operations per month enough?

Each scenario run uses roughly 3-5 operations (trigger + customer lookup + Notion write). At 10,000 ops, that's 2,000–3,000 payments per month before you'd need to upgrade. Most freelancers are fine.

Can I add Stripe refunds to Notion too?

Absolutely. Create a second scenario triggered by charge.refunded. Search Notion for the original Stripe Payment ID and update the Status field to "Refunded." Simple and clean.

Bottom Line

This workflow takes about 30 minutes to build and then runs without you thinking about it again. Your Notion CRM stays current, your client context is always fresh, and you stop losing time to manual data entry that a machine handles better anyway.

Explore more workflows like this at AI Profit Automation — new automations drop every week.

Written by

Founder & AI Automation Researcher

Mahendra Bugaliya is the founder of AI Profit Automation. He tests AI tools and automation workflows hands-on and writes practical, no-hype guides on using them to build and grow online income.

Tags
Make.com automation Stripe Notion integration Notion CRM automate Stripe payments Make.com workflow no-code automation freelancer CRM Stripe webhook Make