Worked samples · four jobs, start to finish
The same four jobs, done, so you can judge before you pay.
Each one below was built from invented source material of the kind people actually send: a phone photo of a menu, a spreadsheet exported from a till, a bare product title, a page out of a scanned supplier document. The source is fake. The output is the real thing at the real quality.
02$39
Product catalog copy
Source: a store export with a title column, a spec column and nothing in the description column. Three of the twenty rows are shown.
Example material, not a client
| Before · the title as exported | After · the description written from it |
|---|---|
| WKBNCH-2D-OAK "Workbench 2 drawer oak 1500mm" Specs: 1500 x 620 x 900mm, 38mm top, 120kg |
A 1500mm bench built to be leaned on. The top is 38mm solid oak, thick enough to clamp to without a backing board and heavy enough that it does not walk when you plane against it. Two drawers on full extension runners take the tools you reach for every ten minutes, so they are not on the top. Rated to 120kg spread load, 900mm high, which suits standing work for most people without a riser. |
| APRN-WX-14 "Waxed apron 14oz brown" Specs: 14oz cotton canvas, 4 pockets, cross-back |
Fourteen ounce waxed canvas, which is the weight where an apron stops being a tea towel and starts stopping sparks. Cross-back straps put the load on your shoulders rather than your neck, so it is still comfortable at hour six. Four pockets: two deep at the hip, one chest, one narrow for a rule. The wax darkens and creases where you fold, which is either the point or a warning, depending on what you want it to look like in a year. |
| CLMP-FBAR-600 "F clamp 600mm heavy duty" Specs: 600mm reach, 120mm throat, 450kg |
A 600mm F clamp with a 120mm throat and 450kg of clamping force, which is enough to close a glue line in hardwood rather than just hold it still. The rail is drawn steel, so it flexes less at full extension than a pressed section will. Padded jaws mean no witness marks on softwood. Buy two more than you think you need, because you will. |
Delivered asdescriptions.csv
sku,title,description,short_description WKBNCH-2D-OAK,"Workbench 2 drawer oak 1500mm","A 1500mm bench built to be leaned on. The top is 38mm solid oak...","Solid oak 1500mm bench, two drawers, 120kg rated." APRN-WX-14,"Waxed apron 14oz brown","Fourteen ounce waxed canvas, which is the weight where...","14oz waxed canvas apron, cross-back, four pockets." CLMP-FBAR-600,"F clamp 600mm heavy duty","A 600mm F clamp with a 120mm throat and 450kg...","600mm F clamp, 450kg, padded jaws."
Why it is shaped like thatimport notes
Column names match the Shopify product CSV, so the file imports without remapping. WooCommerce and most spreadsheets read the same file without changes.
The short_description column exists because the long one gets truncated in category listings, and a description cut off mid-sentence at the point of sale is worse than a short one.
Nothing is claimed that is not in your specs. No invented warranty, no invented origin, no "premium". If a spec is missing, the sentence that would have used it is not written.
03$25
Data cleanup batch
Source: a customer list that has been through three systems and two people. Eight rows shown of a placeholder file of 940.
Example material, not a client
Incustomers_final_v3 (2).csv
name,email,phone,address "SMITH, JANE",Jane.Smith@Example.COM ,07700 900123,"14 bell st, flat 2, BS1 4TR" Jane Smith,jane.smith@example.com,+447700900123,"14 Bell Street Flat 2 BS1 4TR" robert o'neill,R.ONeill@example.com,(0117) 4960123,"3 Quarry Rd, Bristol BS8 1AB" Bob O'Neill,r.oneill@example.com,0117 496 0123,"3 Quarry Road Bristol BS8 1AB" "Ms A. Kaüfmann",a.kaufmann@example.com,,"22 Hill View, BS6 5QT" ,,07700 900456,"no address given" Dieter Weiß,d.weiss@example.com,07700900789,"9 Park Cres BS7 8HT" LTD ACME SUPPLIES,accounts@acme.example,0117 496 0999,"Unit 4 Trade Park BS2 0RT"
Outcustomers_clean.csv
first_name,last_name,email,phone_e164,line1,line2,postcode Jane,Smith,jane.smith@example.com,+447700900123,Flat 2,14 Bell Street,BS1 4TR Robert,O'Neill,r.oneill@example.com,+441174960123,,3 Quarry Road,BS8 1AB Anna,Kaufmann,a.kaufmann@example.com,,,22 Hill View,BS6 5QT Dieter,Weiß,d.weiss@example.com,+447700900789,,9 Park Crescent,BS7 8HT ,ACME Supplies Ltd,accounts@acme.example,+441174960999,Unit 4,Trade Park,BS2 0RT
The change note that ships with it
- 2 duplicate pairs merged. Jane Smith and Robert O'Neill each appeared twice. The row with more filled fields won; the phone number was taken from whichever row had one.
- Encoding repaired on 2 rows. The file was UTF-8 read as Latin-1. Kaufmann and Weiß are restored to their correct spelling rather than stripped of accents.
- Name column split into first and last, with "SMITH, JANE" reversed to the right order and the title "Ms" dropped into no column, because you did not have one for it.
- Phones normalised to E.164. The 0117 numbers resolved to +44 117. One number, 07700 900456, had no name or email attached to it and was moved to the rejects file rather than guessed at.
- Addresses split into line 1, line 2 and postcode. "Rd" and "Cres" expanded, "flat 2" moved to line 1, casing fixed.
- 1 row moved to rejects.csv and not deleted. It is the row with no name, no email and the address "no address given". You get that file too.
- Nothing was invented. Anna's first name comes from the "A." plus the email prefix and is flagged in the note as inferred. Empty stays empty everywhere else.
04$19
Document to structured text
Source: page 11 of a scanned supplier price schedule, photocopied at least twice, with a table that no PDF reader gets right.
Example material, not a client
Intext as the scan reads it
SECTION 4 - BULK RATES (rev. Mar) All rates quoted per unit ex works and are held for 30 days frorn date of issue. Orders below the minirnum quantity are charged at the single unit rate. Pallet surcharge applies to band C only. grade qty band unit lead ------ --------- ----- ------ A2 1-49 14.20 3 days A2 50-199 12.75 3 days A2 200+ 11.40 5 days B1 1-49 9.60 3 days B1 50+ 8.15 7 days C any 6.05 14 days* * band C lead time excludes the pallet surcharge handling period
Outsection-04.md
Section 4. Bulk rates (rev. March)
All rates quoted per unit ex works and are held for 30 days from date of issue. Orders below the minimum quantity are charged at the single unit rate. Pallet surcharge applies to band C only.
| Grade | Qty band | Unit | Lead |
|---|---|---|---|
| A2 | 1–49 | 14.20 | 3 days |
| A2 | 50–199 | 12.75 | 3 days |
| A2 | 200+ | 11.40 | 5 days |
| B1 | 1–49 | 9.60 | 3 days |
| B1 | 50+ | 8.15 | 7 days |
| C | any | 6.05 | 14 days * |
* Band C lead time excludes the pallet surcharge handling period.
The Markdown itselfcopy and paste
## Section 4. Bulk rates (rev. March) All rates quoted per unit ex works and are held for 30 days from date of issue. Orders below the minimum quantity are charged at the single unit rate. Pallet surcharge applies to band C only. | Grade | Qty band | Unit | Lead | |-------|----------|-------|----------| | A2 | 1-49 | 14.20 | 3 days | | A2 | 50-199 | 12.75 | 3 days | | A2 | 200+ | 11.40 | 5 days | | B1 | 1-49 | 9.60 | 3 days | | B1 | 50+ | 8.15 | 7 days | | C | any | 6.05 | 14 days* | \* Band C lead time excludes the pallet surcharge handling period.
Or as JSONsection-04.json
{
"section": 4,
"title": "Bulk rates",
"revision": "March",
"terms": [
"per unit ex works",
"held 30 days from date of issue",
"below minimum qty charged at single unit rate",
"pallet surcharge applies to band C only"
],
"rates": [
{"grade":"A2","qty_min":1,"qty_max":49,
"unit":14.20,"lead_days":3},
{"grade":"A2","qty_min":50,"qty_max":199,
"unit":12.75,"lead_days":3},
{"grade":"A2","qty_min":200,"qty_max":null,
"unit":11.40,"lead_days":5},
{"grade":"B1","qty_min":1,"qty_max":49,
"unit":9.60,"lead_days":3},
{"grade":"B1","qty_min":50,"qty_max":null,
"unit":8.15,"lead_days":7},
{"grade":"C","qty_min":null,"qty_max":null,
"unit":6.05,"lead_days":14,
"note":"excludes pallet surcharge handling"}
]
}
- Two scan errors corrected: "frorn" to "from" and "minirnum" to "minimum". Both are the classic rn/m misread and both are listed rather than silently fixed.
- The table survived. Six rows, four columns, footnote attached to the row it belongs to instead of floating at the bottom of the page.
- Quantity bands became numbers in the JSON output, with an open upper bound written as null rather than as the string "200+", so it can be compared against.
- Nothing was helpfully completed. The scan does not say what "ex works" covers, so neither does the output.
Send your own material
Or ask whether yours fits
Replies to email do not reach this address. This form does.
That is in the inbox
If the payment is already made, the finished file comes back to that address on the same working day. If it is not, a price and a yes or no comes back first.