Expertise / 03
AI, automation and workflows
If it repeats, a script runs it.
Marketing work that used to take a day now runs on a schedule: reports that write themselves, leads that score themselves, monitors that watch mentions and forms, a CRM joined to every data source. Built with Python, Claude, n8n and GitHub Actions on free tiers. The judgment about what to build and whether the output is right stays with a person.
Highlights
3open-source repos on GitHub
2live demos you can click through
90+metrics in the automated LinkedIn Ads deck
Hourlynegative-mention monitor
15 minform-to-sheet sync, failures retry themselves
6 slidesweekly report that writes itself
Each build has a cost ceiling of zero and a written note on where that ceiling is.
What this covers
01Reporting automationWeekly and monthly reports pulled from the ad and analytics APIs, with the house definitions coded in. A model drafts the slides, a person checks every number before it goes out.
02Scoring and routingFit, engagement and intent scores on every lead. n8n moves each new signal to score, tier, ad audience and Slack, so the rep starts the same day.
03Data pipelinesGA4, Search Console, Google Ads and LinkedIn Ads in one SQL model. CRM contacts deduplicated, normalised and enriched with rules you can read.
04Monitors and briefsBrand mentions checked hourly, forms synced every 15 minutes, a daily marketing brief, all delivered to a small phone app with per-alert control.
05AI inside the workflowClaude and Gemini for drafting, classifying, image edits and research. Local models where data cannot leave the machine. A profile file as the only source of facts, so the model cannot invent.
06Assistants and agentsThis site's assistant: three modes, streaming answers, a chain of model providers with fallback, rate limits and an origin check. Agent-driven browser work for the tasks no API covers.
How a build is decided
1It repeatedA task done by hand three times, or a number argued about twice, is the trigger. Nothing is built for its own sake.
2Define the numberWhat the output means, in one line, before any code. The same definition that goes on the board slide.
3Smallest versionA script on a free tier, run by hand first. Scheduled only once the output has been right three weeks running.
4Secrets out, alerts inKeys live in a secrets store, never in code. Failures retry, then notify. Public repos audited for leaked credentials.
5Hand it overA README and a handover note, so the next person can run it without the builder.
Work
| Build | What it does and why it exists | Where |
|---|---|---|
| AI Lead Scoring Engine Python, Flask, SQLite, local LLM | Scores B2B leads on fit, engagement and intent with a dashboard, kanban, bulk import and webhooks. Built when the CRM was full and leads still needed a priority order for nurture. No API costs. | GitHub · Live demo |
| AI Data Governance Engine Python, FastAPI | Deduplicates, normalises and enriches CRM contact data. The free alternative to the paid hygiene tools that sit between a form and a CRM. | GitHub · Live demo |
| LinkedIn Report Automation Python, LinkedIn Ads API, python-pptx | Campaign, creative and demographic data from the LinkedIn Ads API turned into a dashboard and a PowerPoint deck with 90+ metrics and AI-written insights. One click instead of a day of copying. | GitHub |
| Marketing data warehouse Python, SQL, Google APIs | GA4, Search Console and Google Ads in one model with joined views. First finding: about two thirds of search spend was on queries already ranking top three organically. | Private, in use |
| Weekly report generator Python, Claude, ad platform APIs | Pulls the week's spend, clicks and enquiries, applies the house definitions, writes the six-slide report. Leads counted by what the person wrote and their designation. | Private, runs weekly |
| Monitors, briefs and a phone app GitHub Actions, Apps Script, Android | Negative-mention monitor every hour, form sync every 15 minutes, a daily brief, and an app that receives them with per-alert notification control. | Private, paused when not needed |
| Customised Twenty CRM Open-source CRM, n8n | One buyer-journey view per account: ads seen, pages read, emails opened, who replied. So retargeting and email can be aimed at named people. | In progress |
| Social listening dashboard Python, Google Sheets | A month of brand-mention tickets classified into themes and sentiment, with charts and insights, built as a management view in a day. | Private |
| This site and its assistant HTML, CSS, JavaScript, Cloudflare Pages Function | Hand-written pages, no framework, no tracking. The assistant streams from a language model with a profile file as its only source, a provider fallback chain and rate limits. | You are on it |
Rules
- Free tiers only. GitHub Actions minutes, Apps Script, Render, Cloudflare. The ceiling is written down.
- Secrets never in code. Environment variables or a secrets store, and the public repos were audited.
- Every number has a definition written into the script, so the automated report and the manual one cannot disagree.
- A person reads the output before it leaves. AI drafts; it does not sign.
CodePython, FastAPI, SQL, JavaScript, Google Apps Script
ModelsClaude, ChatGPT, Gemini, Perplexity, local open models
Workflown8n, Zapier, Make, GitHub Actions
HostingCloudflare Pages, Render, GitHub
DataGA4, Search Console, Google Ads and LinkedIn Ads APIs, HubSpot, Twenty CRM
Ask the assistant