Case study 01 / 06
FundReachr
Fundraising · SaaS
An AI investor-outreach SaaS, built and shipped end to end
- Data engineering
- Software engineering
- Cloud & infrastructure

Key figures
- Investor data synced into the app
- Daily
- Canonical record per investor
- 1
- Sectors in the investor taxonomy
- 43
- Languages for AI-written messages
- 11
The brief
The challenge
Take a fundraising-automation idea to a live product with no codebase, no team and no infrastructure, for a promise that depends on an investor database that is curated, enriched and always fresh.
What we built
The whole platform: an investor-data engine that collects, classifies, enriches and de-duplicates investors into BigQuery; a Flask API with Auth0, Stripe credit billing and AI message generation; email-delivery workers; four React apps and a browser extension, running on Google Cloud with Postgres on Neon.
Outcome
A live SaaS on Google Cloud whose billing, authentication and outreach were re-engineered as the product found its model.
Related services: Full-stack developmentData collection and analysis
Expertise
What it took.
Data engineering
- An event-driven investor-data pipeline on Cloud Tasks: collect → LLM classification → multi-provider enrichment → taxonomy mapping, landing in a layered BigQuery warehouse.
- Identity resolution that gives each investor one canonical ID whichever source found them, and caches (30-day search, 90-day enrichment, permanent LLM answers) so paid lookups and LLM calls are not repeated within their window.
- A daily BigQuery-to-Postgres sync behind investor search built on JSONB and JSONPath, where free-text cheque sizes are parsed inside SQL.
Software engineering
- A unit-tested Flask API with Auth0 sign-in behind a role-and-ownership authorization layer.
- Stripe credit packs with idempotent webhooks, a wallet and an auditable credit ledger; discount codes mirrored as Stripe coupons.
- Four React 19 apps (customer platform, admin back office, internal CRM, marketing site) and a Manifest V3 extension that fills investors' web forms.
Cloud & infrastructure
- Cloud Run services and jobs, Cloud Functions, Cloud Tasks and Cloud Scheduler, with OIDC tokens on the scheduled and queued calls into the private, IAM-only workers.
- Cloud Build pipelines for every deployable service (Artifact Registry, Secret Manager), with dev → staging → main promotion on the core API, customer app and outreach workers.
- Queue-based worker pools that claim work with SKIP LOCKED and recover from crashes, so campaigns of any size never block the API.
Project 01
Customer platform
React 19 · Flask API · Cloud Run
Where founders define an audience, see the reach and credit cost before anything is generated, review every AI-written message per channel, send from their own Brevo account and follow delivery, opens and clicks.
- Goal
- Package FundReachr's investor database and AI writing as a self-serve, pay-per-use product.
- Highlights
- Three-step campaign wizard with autosaved drafts and live reach and cost estimates over the investor database
- Per-message control: edit or regenerate any message, and send emails one by one or in bulk
- Stripe credit packs, discount codes, receipts and a credit ledger
- Analytics driven by Brevo webhooks through each message's lifecycle
- Stack
- React 19
- Flask
- PostgreSQL
- Auth0
- Stripe
- Brevo





Project 02
Investor-data engine
Python · Cloud Run · Cloud Tasks · BigQuery
Builds and refreshes the database founders search. Source adapters collect investor and fund profiles from web search, investor lists, public registries, directories, VC websites and file drops; an LLM screens web-search results and file drops so only real investors are kept, and extracts their thesis; contact details are enriched; duplicates merge into one canonical record; everything maps to a fixed taxonomy.
- Goal
- Keep a curated, de-duplicated investor database fresh without manual list-building, with paid lookups under control.
- Highlights
- Event chain on Cloud Tasks: collect → classify → enrich → map
- 43 sectors, 9 funding stages and structured geographies
- Caching tiers for search, enrichment and LLM answers
- A Playwright crawler that collected pitch forms from VC websites and mapped their fields to the founder's data with an LLM
- Stack
- Python
- Flask
- BigQuery
- Datastore
- Cloud Tasks
- OpenAI
- Gemini
- Playwright

Project 03
Outreach engine
Cloud Functions · Cloud Tasks · OpenAI · Brevo
Writes every campaign message in parallel and delivers the emails. Generator workers ask OpenAI for an email or LinkedIn note tailored to each investor's thesis and the founder's pitch; sender workers deliver emails through the founder's own Brevo account, with credit checks and an optional pitch-deck attachment.
- Goal
- Personalised outreach at scale that survives crashes, pauses when credits run out and never lets two workers send the same message.
- Highlights
- Postgres as a work queue: SKIP LOCKED claims, stale-work recovery, row-locked completion
- Per-platform, per-language choice between AI generation and templates
- A browser extension that fills investors' web forms with the AI-written values
- Stack
- Python
- Cloud Functions
- Cloud Tasks
- OpenAI
- Brevo
- PostgreSQL


Project 04
Back office & internal CRM
React 19 · Flask · Cloud Run Jobs
An admin suite to run the SaaS without touching the database (users, credits, packs, Stripe-backed discount codes and review queues for user-proposed corrections to investor records), plus the CRM FundReachr uses to sell itself, sending FR/EN sequences in quota-sized daily batches.
- Goal
- Operate, support and grow the product with in-house tools instead of manual database work.
- Highlights
- Field-by-field review of crowd-sourced corrections before they reach the investor database
- Credit grants and deductions written to the ledger
- Cloud Tasks → Cloud Run Job batch sending within the email provider's daily quota
- In-app documentation with Mermaid diagrams of the campaign lifecycle and data model
- Stack
- React 19
- Flask
- Alembic
- Cloud Run Jobs
- Cloud Tasks
- Mermaid






Project 05
Marketing site
React · three.js · Cloud Run
fundreachr.com: a WebGL hero, a three.js visual of the investor network and pack prices read live from the product catalog, plus the scripted Playwright pipeline that records the product demo video.
- Goal
- Turn founders into sign-ups, with real product footage and pack prices read from the live catalog.
- Highlights
- Custom three.js network with shader-driven connections
- Pricing rendered from the backend catalog, with a resilient fallback
- SEO meta on every page, with JSON-LD structured data on the home and FAQ pages
- Stack
- React
- three.js
- Tailwind CSS
- Cloud Run
- Playwright



