Most of my work sits between the tools a company already pays for. I connect them, clean up the data moving through them, and build the missing pieces when no tool fits.
Workflow automation
Contracts, payments, bookings and reports that move themselves. A signed contract opens the client channel, sends the invites and emails the right rep before anyone has to remember.
Zapier
Webhooks
Slack
Telegram
Gmail
Google Apps Script
Custom CRMs and internal tools
When the spreadsheet has 100,000 rows and fifty people editing it, it’s time for a real database. I migrate the data, keep the old sheet running in parallel, and give each person a screen made for their job.
Supabase
PostgreSQL
Retool
Streamlit
FastAPI
Flask
Lead capture and data pipelines
Scrapers, browser extensions and enrichment jobs that turn listing sites and public records into clean, deduplicated, ready-to-call lists.
Python
Playwright
Chrome extensions
Residential proxies
Enrichment APIs
AI agents and call intelligence
Agents that research markets for you, and pipelines that pull every sales call, transcribe it, summarize it and file it where managers will actually read it.
Claude Agent SDK
Anthropic API
Zoom API
GitHub Actions
Translation
Recent work
Built for a fast-growing real estate and short-term rental operations company. Client details stay private; the numbers are real.
44,415
duplicate leads retired from a 113,603-row sheet
Moving a 60-person calling team off one giant spreadsheet
The team was dialing the same houses twice because one property was listed on three sites. I moved everything into a database, collapsed cross-platform duplicates into about 69,000 real properties, and gave every caller their own PIN-protected queue.
Built with Supabase, Streamlit, FastAPI, Python
How it was done
Ran the old sheet and the new app side by side so no one lost a day of calls.
Marked merged copies with their own status so surviving leads kept their phone numbers.
Added a lightweight backup caller view in case the main app went down.
15
live SQL metric views replacing manual reports
A fulfillment CRM with a client portal
Migrated the client tracker off a project-management board into a proper database, imported 900+ historical payments from two processors, and added a call log for account managers and a portal clients can log into.
Built with Supabase, Retool, Flask, PostgreSQL
0
manual steps between a signed contract and a welcomed client
Hands-free client onboarding
When a contract is signed, the client gets a private Slack channel, an invite to the community and a personal intro email from their assigned rep, sent from the rep’s own address.
Built with Zapier, PandaDoc, Slack, Gmail send-as aliases
740+
historical payments backfilled into one tracker
One payments tracker across every processor
Payments from several checkout and financing providers land in one sheet with the right processor name, and disputes trigger an instant alert that tags the people who handle them.
Built with Zapier, webhooks, Google Sheets, Slack
How it was done
Found and fixed a channel-naming bug that was silently dropping paid clients from the tracker.
Reconciled the missing records by hand and removed the duplicates it had created.
9
rental listing sites captured by one browser extension
A one-click rental lead capture extension
Callers browse listings as usual; one click saves the property, contact and price straight into the CRM’s import queue, where it gets deduplicated before anyone dials.
Built with Chrome extension APIs, JavaScript, Supabase
Mobile-friendly scraper apps for map listings and rental sites, plus enrichment jobs that find decision-makers and contact details for brand outreach.
Built with Python, Chrome DevTools Protocol, residential proxies, Docker, Render
Daily
every closer’s calls pulled, transcribed and filed
Sales call vault and AI meeting notes
Recordings and transcripts arrive in a searchable log each morning. Meeting summaries post straight to the right team channel, translated when a manager prefers another language.
Built with Zoom API, GitHub Actions, Supabase, Streamlit, Zapier
1
question in, a full market brief out
Short-term rental market research agent
An AI agent that researches a city for rental arbitrage: typical rents, nightly rates, occupancy and local rules, then writes it up as a brief the sales team can use.
Built with Claude Agent SDK, Python
3
daily report types parsed from chat into sheets
End-of-day reports that file themselves
Reps post their end-of-day numbers in Slack or Telegram the way they always have. A listener reads each message, matches it to the right person and writes clean rows to the team sheet.
Built with Zapier, Telegram bots, regex parsing, Google Sheets
1 tap
to claim a new deal, no app account needed
Deal claim system for a sales channel
Each new deal post carries a claim link. Account managers fill a short form, the claim is logged privately, and the same deal can’t be claimed twice.
Built with Telegram Bot API, Google Apps Script
What is the busywork costing you?
Think of one repetitive task: copying payments into a sheet, posting reminders, sorting leads. Set the sliders and see what a year of it adds up to.
624hours a year you could offload
That’s about 16 full work weeks spent on one task.
Small enough to start this week, structured enough that nothing breaks on the way.
Map the work
A short call where you walk me through the task as it happens today. I write back a plain-language plan: what will run automatically, what still needs a person, and what it costs.
Build alongside your system
I build next to what you already use, so nothing stops while it’s tested. You see it working on real data before anything is switched over.
Hand off and support
You get short video walkthroughs, documented logins and a fix window after launch. If something in your tools changes later, I’m a message away.
Ways to work together
Every project starts with a free written plan, so you know the scope and the price before anything is built.
Most teams start here
One workflow
A single task automated end to end, like payment tracking, onboarding or daily reports.