Case study · Jiga

One set of GTM numbers the whole team can trust.

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.

Client
Jiga, a managed manufacturing platform connecting hardware teams with a vetted supplier network
Worked with
Alfie Lloyd, who leads GTM and RevOps
Engagement
Four months, embedded with the GTM team
Stack
AttioBigQueryPipedreamMongoDB{ }SQLPythonJavaScript
1,600+
CRM lifecycle stages corrected from real order evidence on the first run, and kept correct every day since.
Thousands
of outbound touches from separate tools joined onto one CRM timeline per person.
Daily
demand forecast, now running every day on live data and reproducing the original results exactly.
Alfie Lloyd
“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!”
Alfie Lloyd, BizOps at Jiga

Trust in the dashboards was low.

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.

Every source into one warehouse, then back to where the team works.

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.

Sources
MongoDB
Product database
Orders, quote requests, contracts
⇄
Outbound tools
Emails, replies, calls, meetings, engagement
Attio
Attio
Companies, people, deals, mirrored through the day
BigQuery
The GTM data warehouse
Google BigQuery
CRM mirror, refreshed through the day
Lifecycle table, stage dates from evidence
Demand forecast engine, on live inputs
Forecast snapshots, kept every day
Drift checks that fail loudly
Where the team works
Attio
Back into Attio
Activity timeline per person, lifecycle stages, forecast fields on every company
Two-way
▦
Dashboards
GTM dashboard, quarter planning tab, lifecycle funnel, outbound conversion

Every arrow on this diagram is custom code, written in Python and JavaScript and running on Jiga's own infrastructure.

None of these connections existed off the shelf.

Custom integrations

No native integrations, so I wrote them

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.

Built like software

Idempotent, fail-loud, audited

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.

Proven, not promised

Reproduced to the cent before going live

The forecast engine matched the team's existing results exactly before it replaced anything. Dashboard totals tie to the existing panels to the dollar.

Owned by the client

Their repo, their warehouse, their runbooks

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.

One data layer, four jobs.

01

CRM stages set from evidence, not memory

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.

  • A daily job keeps every company's stage in Attio matching the evidence
  • Over 1,600 stages corrected on the first run, no errors since
  • Lifecycle funnel and time-between-stages charts rebuilt on the new table
02

Every outbound touch on the record a rep opens

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.

  • Thousands of contacts and their engagement history loaded, new activity on the record within minutes
  • Every mapped record audited after each change, zero faults
  • It showed one channel was reaching people the other had never contacted
03

A forecast that runs itself, on live data

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.

  • Reproduces the original results exactly, to the cent
  • A per-customer forecast view behind a Q4 planning tab, with totals that tie to the existing panels
  • The planning tab rolls forward to the next quarter by itself
04

Checks that run every day

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.

  • Freshness and consistency checks on every scheduled rebuild
  • A daily drift check across the CRM mirror, product spend and lifecycle stages
  • Runbooks and audits handed over, so the team can rerun any check

Handed over, running on its own.

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.

Do your CRM and your product data agree?

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 call

Prefer email? sonny@weareapexai.com