Jiga's GTM team was scaling across a CRM, two outbound tools and a product database, with no native integrations between them. I built the data layer that joins them up, so every number comes from the same place.

“Working with Sonny has been great. We had some ambiguous data problems and integrations that needed handling. He was extremely diligent when it came to the accuracy in our data and the logic behind the systems, he took full ownership of the problems and delivered with very little direction needed. Highly recommend working with him if you're looking for someone that gets shit done!”
Jiga's GTM team runs on Attio, with product data in its own database and outbound activity split across two separate tools. The connections between them had been added one at a time as each tool arrived, so the same question could get a different answer depending on which screen you asked.
Alfie wanted the next stage built on one foundation: lifecycle stages that follow real orders, every outbound touch on the record a rep opens, and a demand forecast that runs every day on live data. My job was to make those numbers accurate, automatic and checkable.
Everything lands in one BigQuery warehouse, is joined and checked there once, and goes back into Attio and the dashboards. A rep and a board deck read the same number.
Every arrow on this diagram is custom code, written in Python and JavaScript and running on Jiga's own infrastructure.
Neither of the outbound tools has a native Attio integration. Each connection is code at API level: webhook receivers that keep every raw payload, daily pollers that rebuild the tables, and writers that put it all on the CRM record.
Writers rebuild rather than append, so a rerun is always safe. Jobs refuse to write on thin or stale inputs, and every change was audited record by record before it was called done.
The forecast engine matched the team's existing results exactly before it replaced anything. Dashboard totals tie to the existing panels to the dollar.
Python and JavaScript in Jiga's own repository, SQL and runbooks handed over, every schedule inside their own infrastructure. No dependency on me, or on a no-code platform.
Attio cannot work out when a company really became a customer from orders in a separate product database, so I built that logic in the warehouse. A lifecycle table records the date each company actually reached each stage, from outbound activity, meetings and orders, and the CRM follows it.
Neither outbound tool has a native Attio integration, so I built both. One writer merges emails, calls and engagement from both tools into a single timeline on each person in Attio, with the outbound owner, sentiment and call summaries alongside it.
I checked the team's demand forecasting engine against what actually happened, account by account, before changing anything. Then I rebuilt it as a production Python job that reads live orders, quote requests and contracts every morning, with checks that stop it on bad data.
Every job checks its own work before it writes, and a daily drift check re-tests the findings from the original audit so a fixed problem cannot quietly come back. When something is wrong it fails loudly in the morning, not in a board deck.
Every feed, writer and forecast job runs on a schedule inside Jiga's own infrastructure, with the code, SQL and runbooks handed over. The team spends its week on customers, with numbers everyone reads the same way.
The Readout finds out. You get the findings and a roadmap you can execute with or without me, and the £1,000 comes off the build if you go ahead.
Book a 15-minute intro callPrefer email? sonny@weareapexai.com