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 a single researcher, with no programming background, built a 90-firm Companies House pipeline in a weekend, turned it into a 12-piece Substack series (two visual introductions, seven numbered parts, one standalone RBB deep-dive, one hired-gun-economy companion piece, one methodology article), and prepared the entire dataset for GitHub release.

Leath · April 2026 · 12 min read

The prompt

In the first week of April 2026, one sentence was 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 list of firms. There was no database. There were no scripts. Python had been left untouched for seven years. What the researcher had, rather, was a Companies House API key, a Companies House MCP server, a local SQLite binary, and a working hunch, unglamorous but stubborn, that much of the answer was hiding in the public filings of the UK's corporate registry, if anyone could be bothered to pull them together. Ten days later a 90-firm dataset existed, the first Substack drafts had been written, dozens of chart variants had been rendered, and a public GitHub repository stood ready for anyone to clone and replicate. The interactive work added up to roughly 60 hours. The same task done manually, pulling 8,293 filing records, mapping account PDFs, building the financial time series, cross-referencing officer appointments, and chasing the press trail across 90 firms, would have taken materially longer; no published benchmark is claimed here.

What follows is the story of how that happened: what worked, what failed, what the tooling still cannot do, and what another economist or 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

First, a definition, because this article distinguishes between Claude.ai and Claude Code. Claude.ai is the chat product: open a browser, type at a model, receive prose back. Claude Code is different. It runs in a terminal on a Mac or PC; with permission, it can read and write files in the working directory, run shell commands, query APIs through Model Context Protocol servers, and iterate on its own output. In this project it functioned as a local coding collaborator rather than a chat window. Everything described below happened inside a Claude Code session running against a folder on a Mac called CH Econ Consultancy /. The SQLite database, the Companies House API calls, the PDF downloads, the chart-rendering HTML, and the Substack drafts lived in that project directory.


The first hour

Claude Code received the one-sentence prompt. In the 60 minutes that followed, it did the following.

  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 important distinction is workflow, not magic. The chat product can describe how one might pull Companies House data. Claude Code could run the local scripts, write to the database, and render the first chart in the same working directory.


The largest workflow speed-up in this project: parallel research agents

The Companies House data was the easy part. The hard part was chasing the press story behind each firm. Who founded Keystone Europe? When did Phoenix Equity Partners buy Capital Economics? What happened to Vivid Economics after McKinsey acquired it in 2021? The same questions, repeated across 90 firms, meant many searches across GCR, Bloomberg, Concurrences, PYMNTS, FT, Reuters, consultancy.uk and firm press releases. Done serially, it is the sort of task that turns a researcher into a typist.

In this project, Claude Code was used to spawn sub-agents. Four prompts were written for four batches of firms and dispatched in parallel as background tasks. Each agent was given its batch, told to search a specific list of publications, GCR, Concurrences, PYMNTS, Bloomberg, FT, Reuters, consultancy.uk, LinkedIn press releases, and instructed to find dated events: foundings, hires, departures, acquisitions, roll-ups. Every claim had to carry a URL. The output was structured Markdown written to research/press_coverage/batch[N].md. The four agents ran simultaneously. Total elapsed time from dispatch to all four finished was roughly 12 minutes. The consolidated press-coverage file now runs to more than 1,300 lines of structured research with citations.

This is the part where the arithmetic of AI-assisted research actually bites. Four agents in parallel compress a serial search-and-note-taking task into a short review queue. The time saved is then spent checking the sources, not admiring the automation.

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

What the published record already contained

The project source search found one dedicated published estimate of the UK economics consultancy market. Cebr's March 2018 report put the sector at £1.53 billion in 2016/17, growing at 11.3% a year, across 108 UK firms employing around 7,100 people. The project has not identified a comparable public update. The table below shows what else is out there, and where the gaps sit.

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

Several obvious things are missing from that public record. The CMA does not publish data on its spending with external economics advisors. The project has not found a private-equity or M&A advisory report specifically mapping the economics consulting sector, nor a firm-authored public analysis of the industry's structure. On that basis, this series is presented as a publicly available supply-side map of the UK economics consultancy market since the Cebr report of 2018.

One methodological footnote. Cebr found 108 firms in 2018; this local public catalogue currently tracks 90. The gap probably reflects three things in combination: firms dissolved between 2018 and 2025; scope differences in what counts as "economics consultancy", Cebr may have included policy and forecasting firms that this series classifies separately; and firms filing under names the Companies House API search did not match.


What went wrong the first time

The first version of the dataset contained mistakes. They are set out below because they are the most useful part of this article for anyone planning to do the same thing.

The Arup mistake

The seed list included Arup, the engineering consultancy, on the grounds that Arup has an embedded economics practice that shows up in public-sector policy work. Within a few hours Arup was removed. Its primary activity is civil engineering, not economic evidence. A firm with an economics practice is not the same thing as an economics consultancy, and blurring the definition inflates the market size in a way that is not honest. The rule after the Arup correction became this: a firm enters the dataset only if economic analysis is the product, not a supporting service.

The full firm list

The dataset contains ninety active entries across seven categories, matching the canonical `data/firms.csv` export. Firms that appear on both the global network map and the UK office map are listed once. Category assignment reflects the firm's primary UK activity; several firms — particularly US-origin multi-practice outfits — could reasonably sit in more than one category.

A note on the two denominators

Two firm-counts run through this series and they should be kept distinct. The curated universe is 90 firms — the public-facing catalogue of UK economics consultancies, used in headlines, treemaps and category counts. The public directory gives 80 firms a direct Companies House number. The remaining ten are sub-practices, academic or charity arms, overseas branches, or parent-filed practices: BDO, Deloitte, Grant Thornton, PwC and RSM; E.CA Economics (UK); the Fraser of Allander Institute; NEF Consulting; PA Consulting; and Skylark Consulting Group. Separately, the working database carries 87 internal firm rows for analytical continuity, including registered entities and a brand-of-parent pointer for Compass Lexecon to FTI Consulting LLP (CH OC372614). That internal row count is not the same thing as 87 public-catalogue firms with standalone CH filings.

Quantitative slices in this series — disclosed-turnover totals, ownership segmentation, small-company-exemption counts, league-table coverage — state their basis: the 90-row public catalogue, the 80 direct-CH public directory rows, or the 87-row internal tracking table. Where an earlier draft blurred those denominators, it has been corrected; the band of estimates does not move materially but the arithmetic now reconciles.

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 visible in rankings or public-sector economics work, but excluded here because economics is a supporting service rather than the core product, or because no separate UK economics-consultancy filing is tracked in the canonical directory. 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 March 2018 report identified 108 UK firms using a similar Companies House methodology. The 90-firm public catalogue here is lower, likely reflecting firms dissolved between 2018 and 2025, minor scope differences in what counts as "economics consultancy", and firms filing under names the API search did not match. The difference between the Cebr list and this catalogue should be read as boundary uncertainty, not a precise statement that one list is correct and the other is wrong.

The BRG placement

Berkeley Research Group was categorised in the first pass as Litigation. That is partly true, BRG does heavy disputes work, but BRG is a multi-practice US firm with finance, restructuring and technology practices alongside economics. Slotting it into Litigation misrepresented the Litigation segment's footprint. BRG was moved to Overlap, the label reserved for US-origin firms that split themselves roughly evenly between competition and litigation.

The Caffarra error

This was the mistake that almost went to print. The first research pass described Cristina Caffarra as still at Keystone Europe in 2025, co-head of Europe alongside Andrea Coscelli. That had been the story in November 2022, when Keystone announced her. It was not the story in 2025. Caffarra had in fact left Keystone in 2023, about a year after joining, and had moved into an academic-plus-policy posture: Honorary Professor at UCL, co-founder of the CEPR Competition Research Policy Network, lead of EuroStack. (The UCL profile URL previously cited here has been removed because the page does not render a substantive profile as of April 2026.)

The error surfaced only because a second research agent was dispatched to check three residual questions still nagging at the draft: what had actually happened to Caffarra after Keystone; what was the nature of the Faten Sabry hire at Compass Lexecon; and why had Mark Pragnell briefly re-appeared as a Cebr director in 2024. The Caffarra correction came back first. The draft was edited before publication.

The broader lesson is simple. Do not rely on a single research pass for any claim about a named individual. Verify against the person's own public profile, their current LinkedIn headline, or an authoritative third-party listing. The cost of a wrong personnel claim in a public piece is reputational and potentially legal, so the standard has to be higher than "the first agent found it."

The Sabry misframing

Faten Sabry was initially described as a London antitrust counter-hire by Compass Lexecon, framed as the firm's defensive response to the Econic Partners exodus. Wrong on two counts. Sabry sits in New York, not London. Her practice is securities valuation and financial-damages testimony, not antitrust. She came from NERA, where she had chaired the Global Securities and Finance Practice for 27 years. She is a US financial-litigation hire, not a London competition backfill. The correction went into both the text and the visual-story commentary before publication.

The Fingleton / LECG confusion

An early draft of the founder tree presented two 2011–2013 events, "LECG collapses" and "Fingleton Ltd", side by side on the timeline, without distinguishing them. A reader flagged the framing as confusing: were the two events connected? They were not. LECG was a US firm whose 2011 bankruptcy scattered its London economists to Berkeley Research Group and Compass Lexecon. Fingleton Ltd is a boutique founded in 2013 by John Fingleton, the former head of the Office of Fair Trading, named after him. Different people, different years, different stories. The two timeline entries were rewritten to make the lack of connection explicit.

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 complete inventory of what was used is set out below. The stack is mostly public infrastructure, open-source software and subscription tools already noted.

Tool Purpose Cost
Claude Code (desktop terminal) Primary interface. 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

No paid data subscriptions. No commercial databases. No proprietary research platforms. The working stack is public infrastructure plus a Claude Code subscription.


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

The key architectural decision of the first hour was to put structured facts into a SQLite database rather than keep them only in a spreadsheet. It sounds obvious to a developer. It is not obvious to an economist. SQLite gave the project one place to correct firm names, incorporation dates, categories and financial fields. Corrections such as CEPA incorporated September 2000 not 1993, A&M consolidated, and BRG moved to Overlap went into the database first; the Substack HTML and chart files then read from the corrected source where possible. Corrections still required review, but they no longer depended on hunting through multiple copied tables.

The schema is deliberately small. Ten tables, about 20 useful columns across them. 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)

Nothing in that schema is clever. What made it work was the rule that structured facts should have a database home or an explicit source-note caveat.


Where the tooling is still not good enough: chart labels

The most avoidable time sink was getting scatter-plot labels to sit next to their data points without overlapping each other. This sounds trivial. It is not. The operating-margin-versus-revenue scatter carries 24 firms; 16 of them cluster into a 400 × 200 pixel region in the lower-left quadrant; and ECharts' labelLayout with hideOverlap: true hid some of them, while adding moveOverlap: 'shiftY' moved some of them. Neither option actually solved the problem. The result was hard to read.

The approaches tried, and the fate of each, ran as follows. ECharts' built-in label placement was insufficient for 16 overlapping points. Hiding labels for small bubbles while keeping them for big ones lost information. Alternating labels above and below the bubble helped a little. Layering d3-svg-annotation callouts as an SVG overlay on top of the ECharts canvas, driven by chart.convertToPixel, was the approach eventually shipped. labella.js force-based placement along the right edge of the chart worked for timelines; its verdict on scatter remained open. And inlining D3-Labeler's simulated-annealing algorithm, roughly 90 lines of JavaScript, on top of a plain d3 scatter gave the best overall result.

The honest conclusion: for this project, none of the JavaScript approaches I tried handled the "show every data point with a label and no overlaps" problem as cleanly as ggrepel handles it in R. For this project's dense scatter plots, R remained the cleaner final-rendering tool. Or accept a hybrid: ECharts for the axes and data, d3 for the labels.

Three chart idioms ended up shipping across the eight charts in the Substack. ECharts was used for axis-bound, tooltip-heavy work, the treemap, the bar, the sankey, the stacked bar. ECharts plus a d3-svg-annotation overlay was used for story charts with three to six highlighted points, such as the scatter and the PE deals. And a hand-tuned two-lane ECharts layout with curved arrows was used for the founder-tree timeline. Alongside these, 15-variant gallery pages were built for the scatter, the treemap and the PE timeline, one HTML file per chart, showing 15 rendering approaches on a white background. The final versions were selected from those alternatives. The gallery is included in the companion GitHub repository.


The stop-slop pass

After the third draft of Part 6 (The CMA Drain), the prose was run through stop-slop, a small post-editor skill that strips the predictable patterns of AI writing. Stop-slop kills em-dashes, replaced with commas or full stops; it kills throat-clearing openers like "Here's the thing", "It turns out", and "The real X is"; it kills binary contrasts of the "Not X. Y." and "The answer isn't X. It's Y." variety; it kills false-agency constructions such as "the decision emerges" and "the market rewards"; it kills adverbs like "really", "simply", "actually", and "literally"; and it kills the narrator-from-a-distance voice that reaches for lines like "Nobody designed this".

The pre-stop-slop and post-stop-slop drafts were compared side by side before publication. The difference is visible. The post-stop-slop version reads tighter and sounds less like an AI. It is also, in places, harsher: stop-slop strips the hedges and softening that make technical writing palatable. The version actually published is usually the tighter draft with a handful of earlier hedges restored by hand. For anyone using Claude Code to draft articles, stop-slop belongs in the workflow as a required second pass. In this project the first draft was not publication-ready. The edited draft is the one that ships.


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  

The largest line item is financial extraction from PDFs, 12 hours of manual reading. This is the one part of the project that would be automated differently next time. PDF extraction with a model-based parser, letting the model read the PDFs directly through an API, should reduce that line item, but the saving should be benchmarked rather than asserted. It was not used on the first pass because the model was not yet trusted to read account notes correctly. It would be trusted more now, having been seen to work on the manual-review gaps.


What the tooling cannot do, even now

The limitations are real and worth stating explicitly.

Primary interviews

Claude Code cannot ring up John Vickers and ask him what happened in 2002. Every quotation in this series comes from a published source. A data journalist with Vickers's mobile number would produce a different piece. The shape of this project is desk research, not fieldwork.

Reading a room

It cannot sit at a GCR awards dinner in Brussels and detect which partners are about to walk. It cannot hear the tone in which Mark Israel says "we are very committed to Compass Lexecon" six months before he founds Econic Partners. Leading indicators in a professional-services market live in hallway conversations, and hallway conversations leave no Companies House trail.

Legal risk

Anything defamatory, anything about named individuals, anything that implies a firm is in trouble, it all has to be checked by a human. The model can too easily write "X firm is in financial difficulty" if the research agent turned up three press mentions of late filings. Late filings are not financial difficulty; late filings are often just administrative lag. Personnel claims in this series were checked against the project people ledger and source files before publication, with named career-move claims cross-checked against multiple sources where available, because errors about someone's career on the public record would be unfair and hard to undo.

Deal structure

The valuations in Part 6's PE table are reported figures, not Companies House values. Flint Global is the clearest example: Cinven announced the majority investment, but the deal structure and valuation detail are press-reported rather than official. The actual deal structure, ratchets, earn-outs, vendor loans, warranty caps, is not public and cannot be inferred from Companies House.

Judgment

The hardest thing to automate is deciding what the story is. The model can find facts, group them, and draft prose about them. It cannot own the editorial choice that the Stefan Hunt three-firm journey is a better opener for Part 6 than the Econic Partners launch, or that "the CMA drain" is a better framing than "partner pay in UK economics consulting". Those decisions came from the human, and they are the decisions that turn a database into an article.


What another economist should try next

The most useful move, for any reader who has got this far and is wondering whether they could do the same, is this: pick a small, well-bounded industry where most participants file public accounts, and build a replica database in a weekend. Water utilities. Energy traders. Football clubs. Drinks companies. Private schools. Care homes. Veterinary practices. Funeral services. Abattoirs. Many of them are 90-to-five-hundred-firm universes with public financials and stories that have not been connected up in one place.

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. A single 60-hour Claude Code project, run by one person with no prior programming, produced a 90-firm Companies House dataset and a 12-article series (seven numbered parts plus two visual introductions, one standalone deep-dive, one hired-gun-economy companion piece, and this methodology article). The same work done by hand would have taken materially longer, but no precise manual 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 behind this project is not a developer. Python had been untouched for seven years when the prompt was first typed. Everything Claude Code did, it did while the work was described to it in plain English and corrected when it went wrong. The economist's skill that turned out to matter most was not coding. It was knowing which questions were worth asking, and which numbers to distrust. Claude Code compressed the data-cleaning stage that normally sits between a research question and a first chart. It did not replace the question. It did not replace the judgment. It did not replace the decision as to whether a story was interesting enough to publish. Those are still the researcher's to make.

For any reader with access to a Companies House API key, a Claude Code subscription and a free weekend, the tools are now sufficient to build a serious public-filings map of a neglected market. The markets that remain unmapped are often the ones whose participants file boring accounts that few outsiders have bothered to read. Go find one.