Automation · 12 steps
Stripe deposit to project kickoff automation: deal closed, plan built, kickoff doc ready
A client pays the deposit. The deal closes, a dated project plan is built and a kickoff document is ready, with no hand on the CRM.
Built by Matt Cruz, Modern Code Consulting
The problem
When a client pays a deposit there is a run of admin before any real work starts. Move the deal in the CRM, build the project plan, send the welcome email, write up the kickoff checklist.
It is all copy and paste, and it is easy to skip a step when two deposits land in the same week.
What I built
I built this so the Stripe payment starts everything. A signed webhook verifies the payment, drops duplicates and matches it to exactly one proposal. A test payment or a payment with no matching proposal stops there and says so.
From there the deal moves to Closed Won in GoHighLevel, the accepted proposal becomes a dated project plan in ClickUp, and a Claude Code skill writes the kickoff document from the proposal. Every step reports back in one Telegram message, and a failed step shows the reason without blocking the others.
How it works, step by step
A signed webhook and a Python handler do the exact work. A Claude Code skill writes the kickoff plan, and a script builds the document.
Stage 1 · Payment lands
Verify the Stripe payment event
SubstitutedThe relay checks the Stripe signature on the paid event, drops duplicates and turns it into one record on the paid queue.
Stripe webhook relay, Upstash queue
Match payment to its proposal
RanThe poller confirms the payment is live, finds the one proposal run whose manifest carries exactly this proposal id and stamps its intake record as paid.
run_proposal_queue.py
Stage 2 · Deal and project plan
Move the deal to Closed Won
Not runMoves the payer's deal to Closed Won in the sales pipeline, with no hand on the CRM.
GoHighLevel CRM, crm_move.py
Build the project board spec
RanTurns the accepted proposal into a project plan: a kickoff call, one task per scope item, one milestone per timeline phase and a final invoice, each dated from the day the deposit landed.
proposal_to_clickup_spec.py
Create the project in ClickUp
Not runCreates one Project task and its subtasks in ClickUp from the spec file. Matching is by name, so a re-run updates in place.
ClickUp, clickup_sync.py
Stage 3 · Welcome the client
Send the welcome email
Not runSends the payer a welcome email with the next steps and a link to book the kickoff call. It is sent once per proposal.
Gmail
Start the client work log
Not runA paid deposit makes a client: the poller creates the client folder and writes the first work log line.
log_client_work.py
Stage 4 · Hand off and report
Queue the kickoff doc task
SubstitutedBuilds the task that tells a fresh session to write the kickoff document from the proposal manifest.
Jarvis inbox
Report every step in one message
Not runOne message lists every step with its result. A failed step shows FAILED with the reason and does not block the others.
Telegram
Stage 5 · Kickoff document
Write the kickoff doc plan
RanReads the proposal manifest and writes the kickoff plan: a personal note, the deposit line, which access sections apply, the decisions to lock on the call and the timeline.
create-kickoff-doc skill
Build the kickoff document
RanComposes the document from the plan and the reusable section library, compiles the checklist at the top and stops if any placeholder is unfilled.
generate_kickoff_doc.py
Publish the Doc and export PDF
SubstitutedUploads the document as a shareable Google Doc, turns the checklist into real checkboxes and exports the PDF.
Google Docs (here: pandoc, Chrome)
The recorded run
This is a real run of the automation on an invented business: a commercial cleaning company with 61 buildings. Use the tabs inside it to move between the overview, how it's built, the step-by-step run and the result.
What ran for real: Invented client, proposal and payment. The proposal match, the project board spec, the kickoff plan and the kickoff document ran against their real code. Three steps are substituted and five are not run, because they would touch Stripe, the live queue, the CRM, ClickUp, Gmail, Telegram, Drive or a real client folder. File paths are shown in the pipeline's usual layout, and internal ids and the booking link are masked.
The run is laid out for a desktop screen.
More automations
- Verified lead list, catch-alls held backA saved people search goes in and a deduplicated, verified, import-ready lead file comes out, with every catch-all address held back.
- Personalising a cold email listA messy scraped lead list goes in and a send-ready list comes out, with a natural first name, a company name a person would say and a one-line opener on every row.
- Cold email reply reviewEvery campaign's numbers and every reply go in, and the positive reply rate, what changed since last time and the lines of copy behind the replies come out.
- Keeping a long multi-agent build on trackA project board goes in, and any fresh session can pick the build up from one file and one board read.
Want something like this running in your business?
Book a free 15-minute call. Tell me where the hours and the leads are leaking, and I'll tell you what I'd automate first and what it would cost.
Book a free automation audit