Gavin's headshot

Gavin Vickery

/index /posts /links /me

Building an Estimate Agent with n8n, Notion, and Slack

Oct 27, 2025 4 min read

Scopeify in action

If you’ve ever run a services business, you know the drill. A great sales call with a potential client, ideas flying, excitement building… and then the inevitable, soul-crushing slump as you face the blank page of a new scope of work document. For my business partner and I, this initial scoping phase was a constant bottleneck. We had years of historical data, battle-tested calculations, and a clear methodology, but getting that first draft down always felt like pulling teeth.

We needed a superhero…

We needed an agent

We needed… Scopeify 🦸🏻. (I know I know, the name’s cheesy, get over it).

What sucked

Our process was, frankly, a bit of a mess. After a promising sales call, we’d scramble to compile notes, remember key details, and translate them into a structured estimate. This often meant:

  • Delay: Estimates took too long to produce, leading to missed opportunities.
  • Inconsistency: Different projects started with varying levels of detail and structure. (much to the dismay of our PM team).
  • Burnout: The mental overhead of starting from scratch every time was draining.

We knew there had to be a better way. We needed something that could leverage our existing knowledge, integrate with our daily workflow, and get us 80% of the way there, fast. That’s when the idea for Scopeify was born.

How I was going to fix it

Enter, The Dream Team: n8n, Notion, Slack and a decent LLM

After scribbling on some paper for a few mins, I had a clear plan: an AI-powered assistant that lived in Slack, our primary communication hub. After a sales call, I wanted to simply message @Scopeify in a custom Slack channel (named #estimates, naturally), feed it project notes (either typed directly, linked Notion pages, or even automated notes from Google Meet), chat with it for clarity, and then command it to generate an initial estimate. And any teammember in that channel could hop in and help refine it!

Here’s how I imagined the flow:

  1. Sales call: Conduct the call, gather initial requirements.
  2. Slack integration: Hop into #estimates, @Scopeify with call notes.
  3. AI interaction: A quick back-and-forth for clarification.
  4. Estimate generation: Scopeify reads a Notion template, our conversation, and any shared files.
  5. Notion output: It spits out a URL to a new Notion page containing the initial estimate.
  6. Human in the loop: I review, iterate with Scopeify in the Slack thread for minor tweaks, and then manually refine the final 20% in Notion.

This approach would get us off the ground quickly, allowing us to spend our valuable time on another pour over ☕️ the project-specific nuances rather than the initial setup.

The n8n setup ended up being 4 different workflows. The primary “agent” workflow receives Slack messages and orchestrates the work, treating the other three workflows as tools the LLM can call: one reads existing estimates from Notion, another updates them, and the third creates new ones. This keeps the logic decoupled and easier to maintain and reuse in future.

Scopeify in action

The “gotchas”

Building the core logic in n8n was fairly straightforward, but (and there’s always a “but”) Notion threw some curveballs.

The 100-block limit:

Notion, in its wisdom, treats every line of content as a “block.” A bullet point is a block, a paragraph is a block, a heading is a block. And here’s the rub: their API has a limit of 100 blocks per request when creating or appending page content. Our estimates, with all their detailed line items, assumptions, and deliverables, routinely blew past that.

This meant I couldn’t just feed a beautifully formatted markdown document (which LLMs love) directly to Notion. I had to create a page with a title, then append content block by block, making multiple requests. This quickly became a headache.

Markdown to blocks, and back again:

LLMs are brilliant with markdown. They can generate complex, well-structured text effortlessly. Notion, not so much. This created a friction point:

  • Notion blocks to markdown: I needed a way to convert our existing Notion template (and any Notion notes) into markdown that an LLM could understand.

  • LLM markdown to Notion blocks: The LLM would generate the estimate in markdown, but then I had to convert that markdown back into individual Notion blocks, ready for insertion.

This back-and-forth conversion became a custom tool I had to build, essentially acting as a translator between the LLM’s markdown fluency and Notion’s block-based reality. Honestly, a fun challenge. Always love a reason to flex some nerd muscle.

Dynamic blocks and custom n8n nodes:

The built-in Notion node in n8n is powerful, but it’s designed for static block definitions. You specify the blocks you want to create at design time. Since Scopeify’s estimates are dynamically generated by the LLM, I had no idea what blocks would be needed until runtime.

Instead of fighting with the built-in node, I pivoted to using n8n’s HTTP Request node to call Notion’s API directly. This gave me complete control to dynamically build the page request at runtime, assembling arrays of blocks (in 100-block chunks, of course) based on whatever the LLM generated. The flexibility to handle an unknown number and type of content blocks was worth the extra API wrangling.

Ok, but did it work?

Despite the two weeks of “on and off” wrestling with Notion’s quirks and finessing the n8n-Slack flow, the result has been transformative. Scopeify isn’t just a tool; it’s like adding another highly efficient staff member to our team.

With a relatively low effort of work, we’re now:

  • Faster: What used to take 40 hours of procrastination spread over 3-4 days now takes 10 minutes, same day.
  • More consistent: Every estimate starts from a solid, data-backed foundation.
  • Less stressed: That dreaded “blank page” syndrome is gone.
  • Closing more deals: We’ve seen roughly 20% more deals close, thanks to faster turnaround and more professional estimates.

The “human in the loop” aspect is critical. I’ve mentioned that a lot before. AI is great as a tool, but its not a panacea. Scopeify handles the heavy lifting of assembly and initial data interpretation, getting us to about 80% completion. Then, my business partner or I step in to apply that final layer of project-specific insight, client rapport, and nuanced adjustments. It’s the perfect blend of automation and expert human touch.

If you need some help automating a workflow that grinds your gears, hit me up. I love this shit.