Guide · Extraction
How to extract RFQ line items from PDF and email — and what to check afterwards
Before anyone can match or price a request, it has to become a list: quantity, unit, number, description — one line per item. That sounds like typing. It is not, because the request arrives as a spreadsheet with a letterhead above the table, as a PDF that only looks like a table, or as three sentences in an email. This guide shows how to extract RFQ line items from PDF and email without inventing any, where extraction typically breaks, and how to test a tool for it with your own requests.
Updated October 5, 2026
What a clean line item consists of
A line you can work with has four parts, and a fifth that is easy to forget:
- Quantity — a number someone actually wrote in the request, not a silently assumed one.
- Unit — pieces, metres or a pack. If the customer wrote “box”, the line must still say box: the conversion comes later and needs it.
- Number — and whose it is: the customer's own part number, the manufacturer's part number or your article number.
- Description — complete, including the second and third line that carry the size or the material.
- Source — the place in the original the line came from, so that a reviewer can compare without searching.
Extraction is finished when these are filled or visibly missing. Deciding which of your articles is meant is the next step. A tool that blurs the two hides reading errors behind plausible matches.
Email text, PDF, spreadsheet: three ways of reading
The same five lines need a different reading method depending on how they arrive. Quotrail accepts Excel (.xlsx), CSV, PDF and email files (.eml); an email and each of its readable attachments are treated as separate documents.
Scroll horizontally to see all columns.
| Source | What makes it hard | How Quotrail reads it | Reviewer checks |
|---|---|---|---|
| Spreadsheet (Excel, CSV) | The header is rarely in row 1; column names differ from customer to customer | Looks for the header row in the first 15 rows and recognises the columns by their names in German, English, French and Italian. It needs a quantity column and a column with a description or a number | The note that no line table was recognised, if a sheet is laid out differently |
| PDF with a text layer | A PDF knows neither rows nor columns, only pieces of text at coordinates | Rebuilds rows and columns from the coordinates, then tries three readings in decreasing strictness: the numbered line block of an ERP printout, a table with a header row, running text | That every line of the original has arrived |
| Scanned PDF | There is no text to read, only an image | Accepts the file and flags it as a scan without a text layer. It is not read; there is no text recognition (OCR) | Add the lines by hand or ask for the list in another format |
| Email text | Lines sit between the greeting, explanations and the signature | Reads line by line and conservatively: a line becomes a line item only with a quantity — or with a number, if it is shaped like a line item. What looks like one without meeting these conditions becomes an open question | The open questions |
If an attachment cannot be read — a format outside this list, a damaged file — the rest of the email is still processed and the attachment is listed as skipped. A password-protected PDF that you drop in directly is rejected with a message asking for an unprotected copy.
What typically goes wrong
Scroll horizontally to see all columns.
| In the document | The trap | What Quotrail does | Reviewer checks |
|---|---|---|---|
| A description that continues on the next line | The second line becomes an item of its own, or is lost | In tables and PDFs, attaches a row that contains text only — no quantity, no number — to the line above | That the description is complete |
| A totals row under the table | It is read as an item or glued to the last description | Sorts out total and subtotal rows before they can attach to the last line | Nothing |
| “M12 x 40” next to “x3” | A dimension read as a quantity | Reads “x3” at the end of a line as the quantity only when it does not follow a digit; in “M12 x 40” the 40 stays a dimension | The quantity, if none is given |
| “2 bottles … 50 ml” | The 50 is taken as the quantity | With a quantity and unit in front and a measure at the end, the front one is the quantity; the measure stays in the description | Nothing |
| Customer part number and manufacturer part number in two columns | One is lost, or the two are swapped | Keeps them as separate fields — customer part number, manufacturer part number, manufacturer — when the column names say which is which | Columns with unusual names |
| A number in running text | Nothing says whose number it is | Takes the number as written. Whose number it is gets settled in matching — against your catalog and the numbers already known for this customer | The match, not the extraction |
| Greeting, signature, phone number, date | A phone number or a date becomes a part number | Skips greeting and signature lines and phone lines; a date is not treated as a number | Nothing |
| “Item 3 is cancelled”, “same as last quote” | A change to an earlier request is read as a new item | Creates no line; the sentence becomes an open question, to be carried over by hand | The earlier quote |
Number formats matter here too: in a spreadsheet, the language of the column headers decides how “1.000” is read, independently of the covering email, and a cell that Excel stores as a number is taken as that number. How quantities are converted afterwards is covered in the guide on units, packs and part number errors.
Worked example: one email, two attachments
Fictional example. The request, the customer and the article data are invented to show how the documented rules treat each part of a request; they are not a measurement of extraction quality.
A buyer sends an email with two PDFs: a request printed from their ERP and a scanned sketch. The email text adds one sentence. This is what arrives in review:
Scroll horizontally to see all columns.
| In the request | What is read | Result | Reviewer's job |
|---|---|---|---|
| ERP PDF, line 10: “Shaft seal 25x47x7 … 20 PCS”, indented line below: “NBR, with dust lip” | Quantity 20, unit piece; the two text lines form one description | One line item | Nothing at this step |
| Line 20: “Cable ties 200 mm black … 3 BOX” | Quantity 3 in a pack unit, not in pieces | One line item; the pack stays as the unit | Later, the conversion to pieces with the pack size |
| Line 30: quantity “1.000” in a German document | Read as one thousand, by the language of the document | One line item; the quantity is flagged as ambiguous | The intended quantity |
| The total line under the items | Not an item | Nothing is created | Nothing |
| Second PDF: a scanned sketch | No text layer | Flagged as a scan, not read | Look at the sketch; if it contains an item, add the line by hand |
| Email text: “Please also quote the seals, same as last quote” | A reference to an earlier request, no quantity | Open question; no line is invented | Carry the items over from the earlier quote or ask the customer |
Each line keeps the place it came from. In review the original stays visible next to the lines, and the passage that belongs to the active line is highlighted — nobody has to compare two windows.
Only now does matching begin. What happens to these three lines next is described in the overview of RFQ automation for technical distributors.
What can be automated and what a person must check
Extraction suits fixed rules well, because the question is narrow: what is written here? The reading rules described on this page are deterministic — the same document yields the same lines. Rules can reliably:
- find the header row and the columns of a table,
- rebuild the lines of a PDF and attach continuation lines,
- map unit spellings in four languages to the same units,
- read number formats by the language of the document and flag the ambiguous ones,
- leave out greetings, signatures and total rows.
A person is needed wherever the document does not say enough: scans, sentences that refer to an earlier quote, lines without a quantity, quantities flagged as ambiguous — and the simple question of whether the list is complete. A missing line can be added by hand, with a note on where it came from. The rule to insist on is the one behind all of this: what could not be read is shown as unread, never filled in.
Testing a tool with your own requests
A demo shows one tidy spreadsheet. Your inbox looks different. A short test with your own documents tells you more:
- Collect real requests of every kind you receive: spreadsheets, PDFs from an ERP, PDFs put together by hand, scans, free-text emails and forwarded emails with attachments.
- Count the line items in each original by hand before you let the tool read anything.
- Compare: which lines are missing, which were invented, which were merged or split, where is the quantity or the unit wrong?
- Watch what the tool does with what it cannot read. Does it say so — or does it deliver something plausible?
- Check that every line leads back to its place in the original.
Quotrail never sends a quote on its own, and every quote is approved by a second authorised person. See the plans and prices, book a call to run your own requests through it, or read on about customer part number matching.