For food distributors & wholesalers

Your supplier hides three numbers in one line of text. Harold pulls each into its own column.

Catch weight, pack quantity, price per pound — buried inside a single product description on a 150-line food invoice. Most tools read it as one blob. Harold learns to split it, row by row, so the mis-bills surface before they reach your ledger.

The problem

A case of steak isn't a case of steak

A dry-goods distributor knows every box of crackers weighs the same. A meat, cheese or seafood distributor deals with the opposite: every case weighs something different, and that difference decides what the customer owes.

That variable weight — the catch weight — is what a case actually weighed when it shipped, and it's what the supplier bills against. But on the invoice it's rarely a tidy column of its own. It's tucked into the product description, next to the pack count, next to the unit, in whatever shorthand that supplier happens to use. One line might read “Smoked Kielbasa (1lb-vp) By LBS”. The next, “Chicken Breast 2.5kg x 4 · Case”. Same column. Completely different data.

150–200
complex food invoices a week for a mid-size multi-site operator — easily 50,000+ line items
½ lb
under-weight per case across 100 cases of ribeye is 50 lb of product — a meat distributor's entire margin
$0
is what a wrong pack-size price costs you to detect — because without line-item data, it's invisible

The error that never gets caught: invoiced at the 4/5LB pack price instead of the 6/5LB pack price. Pennies per case. Undetectable if all you capture is the invoice total — and impossible to spot by eye on line 118 of 152, at 7am, across five suppliers' deliveries.

A well-drilled buyer would catch some of it. But “read every description on every line of every invoice and mentally separate the pack count from the weight from the unit price” is not a job a human does reliably at volume. It's a job for something that reads the same field the same way, every row, every time.

What Harold does differently

One description in. Separate, reconcilable columns out.

You point Harold at the description field once and show it what to pull. From then on, every row gets split into the columns you actually need — catch weight, pack quantity, weight per case, price per pound — each landing in its own place, ready to check against what you were charged.

Prime Beef Sirloin Whole  9.08lb  ·  By LBS   @ $4.05/lb
Pack qty
Weight / case
9.08 lb
Price / lb
$4.05
Line total
$36.77
Chicken Breast Boneless 5lb  x 4  · Case   @ $42.00/case
Pack qty
4
Weight / case
20 lb
Price / lb
$2.10
Line total
$42.00
Hard Salami Whole  5.4kg  /  11.88lb  · By LBS
Pack qty
Weight (kg)
5.4 kg
Weight / case
11.88 lb
Price / lb
$8.10

Notice the third row carries the weight in both kilograms and pounds, jammed together with a slash — the kind of shorthand that trips a rules engine written for one format. You don't write a rule for it. You highlight the number you want in a couple of example rows, and Harold works out the pattern.

The kind of invoice we mean

This is what your AP inbox actually looks like

A single delivery, mixing case-pack ambient goods with by-the-kilo meat and cheese. Catch weights populated on some lines and blank on others. Pack counts and weights folded into the description. Multiply it by five suppliers a week.

MIrongate Provision Co.1420 Warehouse Blvd · Elizabeth, NJ 07201 · (908) 555-0180INVOICEMP-40118Terms: Net 15SHIP TONorthway Dining Group — Central Commissary2200 Market St, Philadelphia, PA 19103 · Acct H0294 · Del 06/26/2026ITEM #SHIP QTYCATCH WTITEM DESCRIPTIONPRICE CS·LBAMOUNT220-1142 CASEApple Pie Filling #10 can x 6$24.60$49.20220-1401 CASEChicken Breast Boneless 5lb x 4$42.00$42.00301-0061 CASEGround Beef 80/20 5lb x 6$98.70$98.70301-0281 CASESmoked Bratwurst Rope 1lb x 10$31.50$31.50505-0613 PIECE8.48 LBCheddar Block Sharp · By LBS$3.62$30.70505-0902 PIECE3.13 LBAtlantic Salmon Side Trimmed · By LBS$9.85$61.66505-1201 PIECE9.08 LBPrime Beef Sirloin Whole · By LBS$4.05$36.77505-1552 PIECE11.88 LBHard Salami Whole 5.4kg / 11.88lb · By LBS$8.10$192.46505-2101 PIECE13.34 LBSmoked Slab Bacon · By LBS$4.90$65.37505-2441 PIECE7.01 LBBrie Wheel Double Cream · By LBS$6.20$43.46505-3014 PIECE4.10 LBDry-Aged Ribeye Portion · By LBS$18.90$309.96410-0182 CASEMozzarella Shredded 5lb x 4$33.00$66.00410-0521 CASEFrench Fries 3/8 5lb x 6$28.40$28.40610-2003 CASECanola Oil 35 lb JIB x 1$28.90$86.70610-2441 CASEKosher Salt 3 lb x 12$38.40$38.40Subtotal$1,207.78Sales tax (exempt — food)$0.00TOTAL DUE$1,207.78Page 1 of 4 · Catch-weight lines priced per lb against actual weighed weight at pick.

Illustrative invoice. Fictional distributor and figures, built to show the three data types Harold separates: the catch-weight column, the pack quantity and weight inside each description.

How you train it — no rules, no regex

You highlight. Harold learns the pattern.

Multi-data training is the part food teams tell us they expected to be hard and weren't. You never write an extraction rule. You mark the number you want in a couple of example rows, and Harold generalizes it across the whole invoice — this month's and every month after.

01

Point a new column at the description field

Add the column you want — say weight per case — and switch it to multi-data. That tells Harold this value lives inside the Item Description text, not in a column of its own. It's one toggle.

02

Highlight the number in a couple of real rows

Harold shows you actual lines from your uploaded invoice. You drag over the 11.88 in “5.4kg / 11.88lb”. Do it on two or three rows — including one where the value genuinely isn't present, so Harold learns when to leave the cell blank instead of guessing.

03

Harold states the rule back in plain English

Before you commit, it tells you what it's going to look for — “a number that appears after a slash and immediately before lb”. If that's not what you meant, add another example and it refines. No pattern language to read or debug.

04

It runs on every row, every future invoice

Save it against that supplier's profile and it applies automatically — on manual uploads and on invoices that arrive by email. The live preview fills the column in front of you so you can see it working before anything is exported.

Supplier profile · Irongate Provision Co. · Map fields
lbs_per_case
Number
Item Description   “Hard Salami Whole 5.4kg / 11.88lb”
Multi-data field (1 active)
Teach Harold to find lbs_per_case inside Item Description
Drag over the value you want Harold to extract. Mark rows where the value doesn't appear.
Row 2Hard Salami Whole 5.4kg / 11.88lb · By LBS✓ 11.88
Row 5Smoked Kielbasa 4.15kg / 9.15lb · By LBS✓ 9.15
Row 9Canola Oil 5 gal x 1 · CaseNot present
2 highlighted · 1 not present · Ready — click to teach Harold. Teach Harold
Harold will look for
A number that appears after a slash and immediately before “lb” or “lbs”.
1 pattern, tried in order. Add more row examples to make Harold more accurate.

Recreated training view · invented sample rows. The real panel looks and behaves the same in-app.

Live preview — how your columns look right now
Item descriptionPack qtyLbs / caseCatch wtPrice / lb
Chicken Breast Boneless 5lb x 44202.10
Hard Salami Whole 5.4kg / 11.88lb11.8811.888.10
Prime Beef Sirloin Whole · By LBS9.084.05
Ground Beef 80/20 5lb x 66303.29
Cheddar Block Sharp · By LBS8.483.62

Every trained column fills row by row. Blank where the value genuinely isn't on that line — not a guess.

And when a value is ambiguous

Harold flags the row instead of quietly guessing

No extractor is right 100% of the time on messy free text, and any tool that claims it is hasn't met your suppliers. What matters is what happens on the hard rows.

When a description is genuinely unusual — a weight written in a format Harold hasn't seen from that supplier, or a line total that doesn't reconcile against pack × weight × price — Harold marks it for review rather than pushing a wrong number into your export. You add one more highlighted example and it learns the new format for next time. The goal isn't a black box that's occasionally confidently wrong. It's a column you can trust because you can see, and correct, exactly how it was filled.

Train Harold on one real supplier invoice

Upload a delivery you've already paid, highlight the numbers you wish were in their own columns, and see the export. Ten minutes, your data, no rules to write.

Start free