This post has interactive charts, best read on a laptop.
Leath Al Obaidi · UK Economics Consultancy: A Historical Series
Visual Maps Data Part 1 Part 2 Part 3 Part 4 Part 5 Part 6 Part 7 Methodology

Claude Code for an Economist

How one researcher with no programming background built a 90-firm Companies House pipeline, then turned it into eleven pieces: three visual and data openers, seven numbered parts and this methodology.

Leath · April 2026 · 12 min read

The prompt

In the first week of April 2026, the project began with one sentence typed into Claude Code.

"I want to understand why a small UK economics consultancy in the City makes its partners more money than a Magic Circle law-firm partner."

There was no firm list, database or script. Python had sat untouched for seven years. There was only a Companies House API key, a Companies House MCP server, SQLite and a hunch: much of the answer was buried in Britain’s corporate registry.

Ten days later, a 90-firm dataset and local repository existed. The first Substack drafts were written and dozens of chart variants rendered, though no public dataset repository had been released. The interactive work took roughly 60 hours. Doing it by hand would have meant pulling 8,293 filing records, matching account PDFs, building financial series, checking officer appointments and tracing the press record across 90 firms. It would plainly have taken longer, but this article claims no benchmark.

This is what worked, what failed, what the tools still cannot do and what another analyst might try next.

60 hours
Approximate interactive time for a public-filings research build that would have taken materially longer by hand

What Claude Code actually is

Claude.ai is a chat product: ask in a browser and receive prose. Claude Code runs in a terminal. With permission it can read and write working files, run shell commands, query APIs through Model Context Protocol servers and test its output. Here it served as a local coding collaborator. One Mac folder, CH Econ Consultancy /, held the SQLite database, API calls, downloaded PDFs, chart HTML and Substack drafts.


The first hour

The one-sentence prompt produced this first 60 minutes of work.

  1. Searched the web for UK economics consultancies and returned a seed list of 20 firms, including expected names such as Frontier, Oxera, RBB, Compass Lexecon and Capital Economics, plus less familiar candidates for review.
  2. Asked for scope clarification. Did the project mean pure-play competition boutiques, litigation houses too, or the macro research side as well? The answer became a combined scope covering those strands; the working scope expanded from a 20-firm seed list to a 90-firm public catalogue.
  3. Looked up each firm at Companies House via the MCP server, pulling legal structure, incorporation date, registered address, officers, PSCs, charges, and the filing history.
  4. Began downloading account PDFs for firms with public filings, starting with the latest years and later expanding into the historical filing series.
  5. Extracted the key financials (turnover, operating profit, profit to members, partner count, staff headcount, highest-paid-member where disclosed) and wrote them into a SQLite database with a simple schema.
  6. Built the first chart, a rough treemap of the market by revenue, and displayed it.

The difference is workflow, not magic. A chat can explain how to pull Companies House data. Claude Code ran the scripts, wrote the database and rendered a chart in the same directory.


The largest speed-up: parallel research

Companies House was the easy part. The press record was harder. Who founded Keystone Europe? When did Phoenix Equity Partners buy Capital Economics? What followed when McKinsey acquired Vivid Economics in 2021? Repeating such questions across 90 firms meant searching GCR, Bloomberg, Concurrences, PYMNTS, the FT, Reuters, consultancy.uk and company releases. Done serially, research becomes typing.

Claude Code split the firms into four batches and ran four research agents at once. Each searched a fixed publication list: GCR, Concurrences, PYMNTS, Bloomberg, the FT, Reuters, consultancy.uk, LinkedIn and firm releases. The brief asked for dated foundings, hires, departures, acquisitions and roll-ups; every claim required a URL. Each agent wrote structured Markdown to research/press_coverage/batch[N].md. All four finished in roughly 12 minutes. Their consolidated file exceeds 1,300 cited lines.

Parallelism turned a serial search into a short review queue. The saved time went into checking sources, where it belonged.

12 min
Elapsed time for four parallel research agents to cover 90 firms across eight publications

What the published record already contained

The search found one dedicated estimate of the UK economics-consultancy market. Cebr’s March 2018 report put 2016/17 sector revenue at £1.53 billion, growing by 11.3% a year, across 108 firms employing around 7,100 people. The project found no comparable public update. The table shows the remaining record, and its gaps.

Source What it covers UK economics consulting?
Cebr (March 2018) Dedicated UK economics consultancy market sizing: £1.53bn, 108 firms, 7,100 employees Dedicated market-size estimate used here; no newer Cebr update found in this source set
GCR 100 (26th edition, 2026) Competition economics firm rankings by tier (Elite → Recommended) Yes, firm-level rankings but no revenue or market-size data
Who's Who Legal: Competition Economists Individual economist rankings (Global Elite Thought Leader → Recommended) Yes, people not firms
Consultancy.uk Economics Rankings 48+ UK economics firms across 5 tiers (Diamond → Bronze) Yes, firm tiers but no financials
Source Global Research UK consulting market (£15.2bn total, 2023) No, does not break out economics as a segment
Kentley Insights Global economic consulting ($25.4bn across 195 countries) No, not UK-specific
IBISWorld / Statista General UK management consulting No, economics consulting not identified separately

The gaps are substantial. The CMA does not publish spending on external economics advisers. The project found neither a private-equity or M&A report devoted to the sector nor a firm-authored public analysis of its structure. This series therefore offers a public supply-side map after Cebr’s 2018 report.

Cebr found 108 firms in 2018; this catalogue tracks 90. Three factors probably explain the gap: dissolutions between 2018 and 2025; different definitions of economics consultancy, particularly for policy and forecasting; and filings under names missed by the API search.


What went wrong the first time

The first dataset was wrong in useful ways. Its mistakes reveal more about the method than its successes.

The Arup mistake

The seed list included Arup because the engineering group has an economics practice visible in public-sector policy work. It was removed within hours. Arup’s main product is civil engineering, not economic evidence. Confusing a firm that has economists with an economics consultancy inflates the market. The corrected rule is blunt: economic analysis must be the product, not a supporting service.

The full firm list

The canonical data/firms.csv export contains ninety entries in seven categories: 80 active, 2 dissolved and 8 parent-filed practices. A firm appearing on both maps is counted once. Categories follow the main UK activity, though several US multi-practice firms could reasonably occupy more than one.

A note on the two denominators

Two firm counts recur and must not be confused. The public catalogue contains 90 firms, the number used in headlines, treemaps and categories. Of these, 81 have a direct Companies House number. The other nine fall into sub-practices, academic or charity arms, overseas branches or parent-filed practices. They are BDO, Deloitte, Grant Thornton, PwC and RSM; E.CA Economics (UK); the Fraser of Allander Institute; PA Consulting; and Keystone Strategy, an American firm without a UK-filed entity.

The working database separately carries 87 internal firm rows for analytical continuity. These include registered entities and a pointer from Compass Lexecon to its parent, FTI Consulting LLP (CH OC372614). The number does not mean that 87 catalogue firms have standalone filings.

Every quantitative slice states its denominator: the 90-row catalogue, 81 direct-Companies-House rows or 87-row internal table. Earlier drafts blurred them. The correction did not materially shift the estimates, but it made the arithmetic reconcile.

CategoryFirms
Competition (7) E.CA Economics (UK), Econic Partners (UK), Fingleton Ltd, Frontier Economics Ltd, Keystone Strategy Ltd, Oxera Consulting LLP, RBB Economics LLP
Competition + Litigation overlap (5) Analysis Group Ltd, Brattle Group Ltd, CRA International UK, Cornerstone Research UK, NERA UK Limited
Litigation / disputes (8) A&M Disputes & Investigations LLP, A&M Europe LLP, A&M Tax LLP, Accuracy UK Ltd, BRG UK Ltd, FTI Consulting LLP, Fideres Partners LLP, Secretariat International UK
Macro / forecasting (16) Calverley Economic Advisors, Capital Economics Ltd, Capital Economics Research Ltd, Cebr, Continuum Economics (4Cast), Economic Perspectives Ltd, Fathom Financial Consulting, Independent Economics LLP, Longview Economics Ltd, Lorenzo Codogno Macro Advisors, Macro Advisory Partners LLP, Macro Hive Ltd, Oxford Analytica Ltd, Oxford Economics Ltd, Pantheon Macroeconomics Ltd, The Economist Intelligence Unit Ltd
Policy / think tanks / climate (35) AMION Consulting Ltd, Alma Economics Ltd, Analytically Driven Ltd, Aviation Economics Ltd, BiGGAR Economics Ltd, Buttermere Consulting Ltd, Cambridge Econometrics Ltd, Derrick Jones Economics Ltd, EKOS Consulting (UK) Ltd, Econance Ltd, Ecorys UK Ltd, Fraser of Allander Institute, Head and Heart Economics Ltd, ICF Consulting Services Ltd, LIVE Economics Ltd, London Economics Ltd, NEF Consulting, PA Consulting, Pragmatix Advisory Ltd, Public First Ltd, RSM Economics, SAMI Consulting Ltd, SQW Ltd, Saltmarsh Economics Ltd, Simetrica-Jacobs Ltd, Skylark Consulting Group, Steer Davies & Gleave Ltd, Stephen Wells Consulting, Vivid Economics Ltd, Volterra Partners LLP, WPI Economics Ltd, Warwick Economics & Development, Westbourne Research Services, York Aviation LLP, eftec
Regulation (17) AFRY Management Consulting, BDO Economic Consulting, Belmana Consultancy, CEPA (Cambridge Economic Policy Associates), Connected Economics Ltd, Deloitte Economic Consulting, DotEcon Ltd, ECA Economics Ltd, Economic Consulting Associates, Economic Insight Ltd, Flint Global Ltd, Grant Thornton Economics, Indepen Consulting Ltd, MCC Economics Ltd, Plum Consulting London LLP, PwC Economics, Reckon LLP
Broad (2) AlixPartners UK LLP, Baringa Partners LLP
Also excluded from this dataset: Bain & Company, BCG, Kearney, Arthur D. Little, Roland Berger, KPMG Economics, EY-Parthenon, LSE Consulting, and Arup. All appear in rankings or public-sector economics work. Here, however, economics is a supporting service rather than the core product, or the canonical directory tracks no separate UK economics-consultancy filing. McKinsey appears in the series narrative as the acquirer of Vivid Economics but is not tracked as a firm in the dataset for the same reason.

The Cebr report of March 2018 used a similar Companies House method and found 108 firms. This catalogue’s 90 probably reflects dissolutions between 2018 and 2025, modest scope differences and names missed by the API search. The gap measures boundary uncertainty; it does not prove that either list is uniquely correct.

The BRG placement

The first pass put Berkeley Research Group in Litigation. BRG does much disputes work, but the American group also covers finance, restructuring and technology. The label overstated the segment. BRG moved to Overlap, reserved here for US firms spanning competition and litigation.

The Caffarra error

This error nearly reached print. The first pass described Cristina Caffarra as Keystone Europe’s co-head in 2025 alongside Andrea Coscelli. That was true in November 2022, when Keystone announced her, but stale by 2025. Caffarra left in 2023, about a year after arriving. She became an Honorary Professor at UCL, co-founded the CEPR Competition Research Policy Network and led EuroStack. (A previously cited UCL URL was removed because it showed no substantive profile in April 2026.)

A second research pass caught the error while checking two loose ends: Caffarra’s path after Keystone and the nature of Faten Sabry’s hire at Compass Lexecon. The draft was corrected before publication.

Never rely on one research pass for a claim about a named person. Check the person’s public profile, current LinkedIn headline or an authoritative third-party listing. A wrong career claim creates reputational and possibly legal risk. “The first agent found it” is not a standard.

The Sabry misframing

Faten Sabry was first cast as Compass Lexecon’s London antitrust counter-hire after the Econic Partners exodus. Both location and practice were wrong. Sabry is in New York and works on securities valuation and financial damages, not antitrust. She joined from NERA after 27 years, having chaired its Global Securities and Finance Practice. This was an American financial-litigation hire, not London competition backfill. Both text and visual commentary were corrected.

The Fingleton / LECG confusion

An early founder tree placed two 2011–2013 entries side by side: “LECG collapses” and “Fingleton Ltd”. A reader reasonably wondered whether they were connected. They were not. The American firm LECG went bankrupt in 2011, scattering London economists to Berkeley Research Group and Compass Lexecon. John Fingleton, a former Office of Fair Trading head, founded his namesake boutique in 2013. Different people, years and stories. The timeline now says so.

The pattern across all five mistakes: AI research tools are good at surface-level summarisation and bad at drawing distinctions. The model will happily merge two unrelated events into one narrative if the narrative reads well. It is on the human to notice when the story is too tidy and go check.

The tooling stack

The stack was mostly public infrastructure, open-source software and one subscription.

Tool Purpose Cost
Claude Code (desktop terminal) Main tool. Everything else happened inside a single Claude Code session. Subscription
Companies House REST API Firm profiles, officers, charges, PSCs, filings, document downloads. Free, rate-limited
Companies House MCP server Wrapper around the CH API so Claude Code could call endpoints without shelling out. Open source
SQLite Project database. Structured facts lived here; charts and articles read from it where possible. Free
ECharts and d3-svg-annotation Visualisation. Dark-theme charts in the Substack HTML. Susie Lu's d3-annotation layered on top for story-point callouts. Free
Observable Plot, Plotly, labella.js Chart-variant gallery files for picking between rendering idioms. Free
Hardik Pandya's stop-slop skill Post-editor that strips em-dashes, throat-clearing openers and passive voice from AI-written prose. Free, open source

There were no paid data feeds, commercial databases or proprietary research platforms. Public infrastructure and a Claude Code subscription did the work.


The single pattern that made the rest work: SQLite as project database

The best decision came in the first hour: put structured facts in SQLite, not only in a spreadsheet. Developers may find this obvious; economists often do not. The database became the one place to correct names, dates, categories and financial fields. CEPA’s incorporation changed to September 2000 from 1993; A&M was consolidated; BRG moved to Overlap. Each correction entered the database first, then flowed into HTML and charts where possible. Review remained necessary, but searching copied tables did not.

The schema is deliberately small: nine core tables and about 20 useful columns. Anyone can reproduce it.

firms              (id, name, ch_number, category, year_founded, founders, ...)
financials         (firm_id, year_end, turnover, operating_profit, num_members, ...)
charges            (firm_id, charge_code, status, created_on, person_entitled, ...)
officer_appointments (officer_name, company_number, role, appointed_on, resigned_on, ...)
historical_filings (firm_id, filing_date, filing_type, description, category)
psc_chain          (firm_id, parent_name, parent_type, level, ...)
derived_metrics    (firm_id, metric, year, value)
pe_deals           (year, firm, investor, deal_type, value, source_url)
founder_timeline   (year, event, firm, people, description, source_url)

The schema is ordinary. The rule matters: every structured fact needs a database home or an explicit source caveat.


Where the tooling is still not good enough: chart labels

Scatter-plot labels consumed absurd amounts of time. The margin-versus-revenue chart contains 24 firms, 16 squeezed into a 400 × 200-pixel patch in the lower-left corner. EChartslabelLayout with hideOverlap: true hid labels; moveOverlap: 'shiftY' merely moved them. Neither made the chart readable.

ECharts’ built-in placement failed on the 16 overlapping points. Hiding small-bubble labels discarded information; alternating labels above and below helped only slightly. The shipped version layers d3-svg-annotation callouts over the ECharts canvas using chart.convertToPixel. Force-based labella.js worked on timelines but remained unproven on the scatter. A roughly 90-line implementation of D3-Labeler’s simulated annealing over a plain d3 chart worked best overall.

For this project, no JavaScript method handled “label every point without overlap” as cleanly as ggrepel in R. Dense final scatters were cleaner in R. The alternative is a hybrid: ECharts for axes and data, d3 for labels.

Three idioms shipped across eight Substack charts. ECharts handled axis-bound, tooltip-heavy work: treemap, bar, sankey and stacked bar. ECharts plus d3-svg-annotation handled stories with three to six highlighted points, including the scatter and PE deals. A hand-tuned two-lane ECharts layout with curved arrows handled the founder tree.

For the scatter, treemap and PE timeline, 15-variant gallery pages compared 15 approaches on a white background, one HTML file per chart. The final charts came from those trials. The companion GitHub repository includes the gallery.


The stop-slop pass

After the third draft of Part 6, “The CMA Drain”, stop-slop searched for predictable AI habits. It replaces gratuitous em dashes; cuts throat-clearing such as “Here’s the thing”, “It turns out” and “The real X is”; rejects binary “Not X. Y.” and “The answer isn’t X. It’s Y.” constructions; and flags false agency such as “the decision emerges” or “the market rewards”. It also hunts weak adverbs, including “really”, “simply”, “actually” and “literally”, and the distant narrator who says “Nobody designed this”.

The before-and-after drafts were compared side by side. The edited version was tighter and less synthetic, but sometimes too harsh: a mechanical cleaner can remove honest qualification along with padding. The published text therefore kept the tighter draft and restored a few necessary hedges by hand. In this project the first draft was not fit to publish. Editing, not generation, produced the article.


Where the 60 hours actually went

Phase Hours What happened
Firm discovery and dedup 4 Seed list, web searches, manual review, removal of non-core firms.
Companies House lookup 6 CH API calls for profile, officers, charges, filings. PDF download loop.
Financial extraction 12 Reading account PDFs, extracting turnover, profit, partner count. Mostly by hand because the PDFs vary in format.
Parallel research agents 3 (agents) + 4 (verify) Four sub-agents running 12 minutes of research each, plus my verification pass against primary sources.
Schema and corrections 6 SQLite schema, four rounds of corrections, deduplication.
Visualisation (initial) 10 First dark-theme pass. ECharts config for eight charts.
Substack prose (Parts 1–7) 10 Drafting, hyperlinking, stop-slop pass, re-editing.
Corrections and rewrites 5 Caffarra fix, Sabry correction, A&M consolidation, BRG move.
Total: approximately 60 hours  

Financial extraction was the largest item: 12 hours of reading PDFs. Next time a model-based parser could read them through an API. It should save time, but the saving needs a benchmark. The first pass stayed manual because the model had not earned trust on account notes. Later gap checks made a stronger case for using it, with review.


What the tooling cannot do, even now

The limits are as important as the speed.

Primary interviews

Claude Code cannot ring John Vickers and ask what happened in 2002. Every quotation here comes from a published source. A reporter with Vickers’s number would write a different piece. This is desk research, not fieldwork.

Reading a room

Nor can it sit at a GCR dinner in Brussels and sense which partners are preparing to leave. It cannot hear Mark Israel say “we are very committed to Compass Lexecon” six months before founding Econic Partners. Hallway talk may lead the filings in professional services, but leaves no Companies House trail.

Legal risk

A human must check anything defamatory, personal or suggestive of financial trouble. Three reports of late filings can tempt a model to write “X firm is in financial difficulty”. Late filing often means administrative delay, nothing more. Before publication, personnel claims were checked against the people ledger and source files; named career moves used several sources where available. A public error about someone’s career would be unfair and hard to repair.

Deal structure

Part 6’s private-equity valuations are reported figures, not Companies House values. For Flint Global, Cinven announced a majority investment; the press supplied the valuation and structural detail. The reviewed public sources do not reveal ratchets, earn-outs, vendor loans or warranty caps. Filings alone cannot supply them.

Judgment

The hardest task is deciding what the story is. A model can find and group facts, then draft around them. It cannot own the choice to open Part 6 with Stefan Hunt’s three-firm route rather than Econic Partners, or to call the piece “the CMA drain” instead of “partner pay in UK economics consulting”. Such choices turn a database into an article. They remain the author’s.


What another economist should try next

Pick a small, bounded industry whose members file public accounts. Build its database in a weekend. Try water utilities, energy traders, football clubs, drinks companies, private schools, care homes, vets, funeral directors or abattoirs. Many contain 90-to-five-hundred firms, public financials and stories nobody has yet joined together.

The recipe runs as follows.

  1. Get a Companies House API key. Free, five minutes. developer.company-information.service.gov.uk.
  2. Install Claude Code. Desktop terminal, not the web app. Connect it to an Anthropic account.
  3. Install the Companies House MCP server or a similar wrapper. Claude Code can then call CH endpoints directly.
  4. Start with a seed list of 20 firms, and get Claude Code to expand it. Be ruthless about the definition of "in scope".
  5. Resolve every firm to a CH number where one exists. This is the anchor. Without it, the downstream financial and officer checks are much weaker.
  6. Put everything in SQLite. Not Excel. Not a Google Sheet. SQLite.
  7. Run parallel research agents for press coverage. Four at a time is the sweet spot. More than four and the ability to verify begins to go.
  8. Verify every dated personnel claim against a primary source before publishing. This is the most important publication rule in the workflow.
  9. Publish the dataset on GitHub under OGL + CC-BY. Companies House data is public domain under the Open Government Licence. Republishing derivatives is allowed, and should be done.
  10. Write about the process. The methodology article shows the method to other economists. The industry article carries the substantive market analysis.

Key takeaways

  1. One person with no prior programming used a single 60-hour Claude Code project to produce a 90-firm Companies House dataset. The same project produced eleven articles: seven numbered parts, three opening visual and data pieces, and this methodology. Doing the work by hand would have taken materially longer, though no precise benchmark is claimed.
  2. The biggest speed-up was the dispatch of four parallel research agents across four firm batches. Total elapsed time was roughly 12 minutes; the time saved still had to be spent on verification.
  3. The most important architectural choice was SQLite as project database, rather than a spreadsheet. Corrections went into one structured source first.
  4. Five errors made it into early drafts and were caught before publication. In each case the model had summarised across unrelated facts into a tidy narrative. The human's job is to notice when the story is too tidy.
  5. Label placement on crowded scatter plots remains difficult in JavaScript. For ggrepel-quality labelling, the final chart is better handled in R.
  6. Publish the dataset. Companies House data is reusable under the Open Government Licence v3.0. Republishing it on GitHub is credibility for free.
  7. The model cannot do primary interviews, legal-risk assessment, deal-structure inference, or own the editorial judgment. Those remain human responsibilities.

A final observation

The researcher is not a developer; Python had gone untouched for seven years. Claude Code received instructions in plain English and corrections when it failed. Coding mattered less than knowing which questions deserved asking and which numbers deserved suspicion. The tool shortened the cleaning between question and chart. It could not choose the question, exercise judgment or decide whether the result deserved publication. Those tasks remained human.

A Companies House API key, a Claude Code subscription and a free weekend are enough to map a neglected market seriously. The best candidates often file the dullest accounts. Few outsiders bother to read them. Go and find one.