WorkAcceleration Partners

  • Acceleration Partners

Client story

The model writes the words. Code owns the numbers.

Acceleration Partners’ account managers wrote every client’s weekly report by hand. We built an AI engine to write them for 43 client programs, where code owns every figure and each one was proven against two outside sources.

Client
Acceleration Partners
Industry
Partnership marketing
Timeline
2 months
Built with
AWS Bedrock AgentCore, Claude, Amazon Redshift
Example clients and figures are illustrative, but the verification counts are real.

The problem

Acceleration Partners runs partnership marketing programs for more than 150 brands. Every week, each one gets a report: what the program earned, which publishers earned it, what it cost and what to do next. For most clients, that report is the agency.

Account managers wrote each one by hand. A language model could draft it fast. It could also print a wrong number with total confidence.

In front of a client, one wrong number costs more than any hours saved. So the job was never the writing. It was making every number provable.

What we built

Each report is built in three stages, with walls the build itself enforces. Code owns every number. The model owns only the words around them.

  • Compute: code reads the warehouse, works out every figure with its prior week, same week last year and eight-week baseline, then freezes them.
  • Write: the model drafts the pacing note, highlights and actions using references to frozen figures. It never types a digit.
  • Render: code draws tables, charts and the PDF from the same frozen figures, so a chart never disagrees with its table.
  • Guard: any sentence holding a number code did not place, like “ROAS reached 4.8x”, is rejected. No headline totals, no run.
  • Spec: each client is one file of definitions, currencies and banned words. One engine reads them all. No per-client code.
  • Anomalies: a second agent answers in Slack. Plain statistics find what moved, program first, then each publisher. The model only writes the summary.

How we know it works

An engine that agrees with itself proves nothing. Every figure was checked against two outside sources. One is a query written by hand from the spec that reads clicks from another table and converts currency its own way. The other is the client’s existing Power BI report, with the client’s own filters.

The engine had to match that query exactly, with no exceptions. Gaps with the client’s report were reconciled only by recomputing both sides from raw rows. Money had to match within half a cent and clicks exactly, across eleven reporting windows: 4,756 figures in all.

A test that cannot fail is decoration. So we planted defects: inflated revenue, clicks shifted by one and a skipped currency conversion. 63 assertions demand the checker catch each one. Doing this exposed a real flaw in the checker. We fixed it.

  • On every run, the comparison adds one cent to a frozen revenue figure and must report exactly that one difference.
  • 23 automated checks run on every change, with no credentials and no warehouse access.
  • We pull out a data source, a placement feed or the model itself. The report keeps the same headline numbers and notes what is missing.

Results

figures compared across three independent sources
4,756
client units that match the client’s own report exactly
41 of 52
client report programs specified for one engine
43
errors found in client numbers, each now blocked by a check
13

What changed

41 of 52 client units match the client’s own report exactly. Seven more match once an agreed definition is applied. Three sit inside the normal settlement window and one is blocked.

The checks found 13 errors in numbers clients already had: revenue under-reported roughly threefold, failed payments counted as sales, rejected transactions inflating orders in one case by 46 percent and two currencies added without conversion. Each now has a check that stops it coming back.

Where it stops

  • At handoff, the report engine’s production runtime was not yet provisioned. The anomaly and analytics agents were already answering in Slack.
  • One client unit stays blocked until a missing fee figure arrives. We will not call it verified on a diagnosis.
  • Clients that sell in several regions get each region in its own currency. The engine will not invent a total across them.
  • A separate model grades the writing three times per section. Its scores are advisory and do not block a release.

What we delivered

  • A report engine that computes and freezes every figure before a model writes a word
  • Specifications for 43 client programs, with no per-client code
  • A three-source verification board for 52 client units and 4,756 figures
  • An anomaly agent in Slack that flags real changes worth at least $500 and stays quiet otherwise
  • Infrastructure as code on AWS across development, staging and production

Technologies

  • AWS Bedrock AgentCore
  • Claude
  • Amazon Redshift
  • Terraform
  • Slack
  • Power BI

More work

EPOCH platform

Every anomaly gets a verdict. Or an honest silence.

Verdict is EPOCH’s own accelerator, demonstrated on public data and benchmarks. Math finds an anomaly’s likely cause inside Snowflake, a model only explains it and Verdict says so when it finds none.

Read the story
Verdict anomaly diagnosis

EPOCH platform

Predict the failure. Call the peak. Price the storm.

Grid Intelligence is the platform we built on Snowflake to answer the three questions that decide a cooperative’s year. Every model result was measured on a test fleet built from public utility data.

Read the story
Grid Intelligence

Bring us the project that matters most.

Tell us what you’re building and what’s in the way. You’ll hear back within 24 hours.