EN 10204 3.1 MTC to VDA 231-301
Pricing
from $20.00 / 1,000 document processeds
EN 10204 3.1 MTC to VDA 231-301
Convert user-supplied EN 10204 3.1 mill test certificate PDFs into VDA 231-301 JSON. No website crawling.
Pricing
from $20.00 / 1,000 document processeds
Rating
0.0
(0)
Developer
Leon Yu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
What does EN 10204 3.1 Mill Test Certificate Parser do?
This Actor parses an EN 10204 3.1 mill test certificate (an MTC, or inspection certificate) into VDA 231-301 JSON. You upload the PDF, or you paste a direct file URL. It reads the text layer and, when a page has almost no characters, Tesseract. It downloads only the files you supply. It does not crawl a website, follow links, or log in.
The JSON shape follows the VDA 231-301 EN 10204 schema. Each dataset item also carries a canonical extract, warnings, a confidence score, and needsReview / schemaValid flags. Schedule a run, call it through the Apify API, or export the dataset as JSON, CSV, or Excel.
Press Start and the run uses a synthetic one-page certificate with a text layer: schemaValid is true and confidence is 0.95. The same file is committed as samples/sample-en10204-3.1.pdf.
Why use this EN 10204 parser?
Purchasing, incoming inspection, and material traceability all start from the mill certificate: heat number, dimensions, product standard, chemical composition, and mechanical properties. The Actor turns that PDF into a dataset you can schedule, monitor, call from the Apify API, and send on with a webhook.
- Header lines and tables are aligned by position, so a blank min/max cell is not filled from the next number.
- Chemistry, strength, and elongation are checked for units, numeric range, min/max versus measured, composition sums, Rm/Re, and an IIW carbon-equivalent estimate.
- A mismatch is a warning. The measured number is kept.
- Output is validated against the vendored VDA schema. Schema errors are returned with the document.
Use cases
- Purchasing. Certificate number, customer order, grade, and heat number, one dataset item per PDF.
- Incoming inspection. Chemistry and tensile rows with the printed min/max beside the measured value, plus a warning when the measured value sits outside those limits.
- Traceability. Heat number tied to size, the product standard, and the EN 10204 3.1 statement.
- Systems of record. Download JSON, CSV, or Excel, or read the same items from the Apify API.
What data can you extract?
| Field | What it is |
|---|---|
canonical.document | Certificate number, dates, customer, order, signatory, mill, EN 10204 standard |
canonical.product | Grade, size, thickness, width, length, product standard |
canonical.heats | Heat number, element min/max/measured, mechanical rows |
certificate | VDA 231-301 TestingProject with chemistry and tensile test series |
warnings | Limits, sums, unit conversions, and reference-data notes |
schemaValid | Whether certificate validates against the VDA schema |
confidence | 0 to 1 score from the fields that were actually read |
needsReview | True when the schema fails, confidence is under 0.75, or a warning was raised |
CAS numbers are not printed on a typical certificate. When a row is mapped into the VDA composition array, the CAS entry comes from a public element registry and the item gets an info warning. Carbon equivalent (Ceq, CE, CEV) is not stored as cerium.
confidence counts fields that were filled. On a scan it can stay high while many of those fields still disagree with a ground-truth sheet. Use schemaValid, needsReview, and warnings together with it.
How to extract an EN 10204 certificate
- Open the Actor. The Certificate PDF URLs field is prefilled with the synthetic text-layer sample below. Replace it with your own direct PDF URL, or upload PDFs instead.
- Set Maximum pages per PDF (default 10, hard cap 25). Leave OCR scanned pages on if the files are scans. The prefilled sample has a text layer, so OCR is not used.
- Set the run memory to 1024 MB (the default). The platform default run timeout is 900 seconds. The Actor stops on its own at 820 seconds so it can still write
SUMMARYand a status message before that kill. - Run the Actor. Open the dataset for one item per file, and the key-value store key
SUMMARYfor counts and the prices that were in effect.
The same input JSON is the body of an Apify API run. The API tab on this Actor shows the endpoint.
Example input
{"fileUrls": ["https://raw.githubusercontent.com/yushengliang0530-alt/mtc-public-samples/main/sample-en10204-3.1.pdf"],"maxPages": 10,"enableOcr": true,"ocrLanguage": "eng"}
That URL is a public copy of the synthetic certificate (customer "Example Steel Buyer", mill "Example Mill Works", grade S355J2, heat H240311). The same PDF is also committed in this Actor repository at samples/sample-en10204-3.1.pdf. It is the file a Store run uses when you keep the prefill.
Uploads use certificateFiles (key-value store file keys). Provide at least one of fileUrls or certificateFiles.
Example output
A run of that sample returns a record like this. The full local item, including the VDA certificate object, is in samples/example-output.json (sourceUrl is null there because that file was read from disk).
{"sourceUrl": "https://raw.githubusercontent.com/yushengliang0530-alt/mtc-public-samples/main/sample-en10204-3.1.pdf","fileName": "sample-en10204-3.1.pdf","status": "succeeded","pageCount": 1,"pagesProcessed": 1,"ocrUsed": false,"extractionMethod": "text","confidence": 0.95,"needsReview": false,"schemaValid": true,"canonical": {"document": {"certificate_number": "MTC-2024-0017","issuing_date": "2024-03-11","standard": "EN 10204 3.1","customer": "Example Steel Buyer","order_number": "C123456"},"product": {"material": "S355J2","thickness_mm": 12.0,"width_mm": 1500.0,"length_mm": 6000.0,"product_standard": "EN 10025-2"},"heats": [{"heat_number": "H240311","elements": {"C": { "measured": 0.16, "min": 0.1, "max": 0.22, "unit": "%" }},"mechanical": [{ "symbol": "Rp0.2", "unit": "MPa", "min": 355.0, "measured": 412.0 }]}]}}
certificate on the same item is the VDA 231-301 document (TestingProject, optical emission series, tensile series). You can download the dataset in JSON, CSV, Excel, or HTML.
How much does EN 10204 extraction cost?
Public pricing is pay per event. There is no start fee.
| Event | Price | When it is charged |
|---|---|---|
document-processed | $0.02 | Once per PDF that was read into a result |
page-processed | $0.005 | Once per page that produced text or OCR words, on a document that succeeded |
The prefilled one-page sample is $0.025 in events ($0.02 + $0.005). A four-page certificate that succeeds is $0.04 ($0.02 + 4 × $0.005). Failed downloads, files that are not PDFs, and files with no readable text are stored as status: "failed" and are not charged. If the remaining ACTOR_MAX_TOTAL_CHARGE_USD budget cannot cover the next document and its pages, that file is skipped and not charged.
The Actor reads these prices at runtime with ChargingManager.get_pricing_info(). The code does not contain a price table, and it does not charge a start event or apify-default-dataset-item.
Apify also bills the memory you allocate. Measured on this repository, with the process resident set size (Linux ru_maxrss):
| Document | Pages | OCR | Time | Peak RSS | Field accuracy |
|---|---|---|---|---|---|
samples/sample-en10204-3.1.pdf | 1 | no | 0.047 s | 58 MB | 21/21 = 1.00 |
Diler phone scan diler-07-07-2025-rerun-41-44.pdf (optional) | 4 | yes | 121.2 s | 183 MB | 108/387 = 0.279 |
At the default 1024 MB and about $0.30 per compute unit (1 GB-hour), the text certificate is about 1 * (0.047/3600) * 0.30 ≈ $0.000004 of platform compute, and the 4-page scan is about 121.2/3600 * 0.30 ≈ $0.010. Re-measure with python scripts/benchmark.py if you change the OCR path.
Phone scans and OCR
The default run is the text-layer sample above. It passes VDA schema validation with high confidence and does not use OCR.
Scanned certificates are optional. Leave OCR scanned pages on for a photograph or a scan. The optional check in this repository is the GoSmarter Diler phone scan data/benchmark/diler-07-07-2025-rerun-41-44.pdf (MIT). On that file the benchmark recovered the certificate number, issuing date, EN 10204 3.1, customer, order number, and the BS 4449 grade line, plus heat numbers and many composition cells (including C, Si, Mn, P, and S on the heats whose digits were readable). Cells the OCR did not read stayed empty.
schemaValid stayed false and needsReview stayed true. The form does not print the laboratory order, the signatory, or the VDA tensile symbols Rp0.2, A50, and Ag, and those values are not invented. Confidence on that scan was 0.85 because many fields were filled. Field accuracy against the published ground truth was 0.279. Treat a phone scan as a draft for review.
Input
See the input tab for every field. fileUrls must be http(s) links to the PDF itself. The downloader resolves DNS once, refuses private, loopback, and link-local addresses (including cloud metadata), pins the TCP connection to the checked IP, and applies the same checks to every redirect. The whole download, including redirects and the body, has a 20 second hard deadline that the input cannot raise. Only ports 80 and 443 are allowed.
OCR has the same kind of cap. Each page has a 120 second wall-clock deadline, one Tesseract call has a 20 second cap, and all OCR in one file has a 480 second deadline. Input cannot raise these. A page that runs out of time keeps any heats already read and is marked in warnings; later pages are skipped once the file deadline is reached. The log records download start and finish, each page's OCR start and finish (including orientation, header, and chemistry-row lines), and every charge attempt.
The default run timeout is 900 seconds. The Actor's own budget is 820 seconds: under that platform kill, and above the 480 second document OCR cap, so one scanned file can finish and the run can still exit with a status message. With OCR left on, another file starts only when a full document OCR budget still fits. A scanned multi-page PDF should stay within that one-file budget. Prefer a text-layer PDF when the mill can provide one.
maxPages limits how many pages are parsed and how many page-processed events can be charged for that file.
Output
The default dataset has one item per file. You can download that dataset as JSON, HTML, CSV, or Excel. The key-value store record SUMMARY has requested, succeeded, failed, and skipped counts, pages charged, and the event prices returned by get_pricing_info.
Info warnings (for example CAS numbers taken from the element registry) do not by themselves set needsReview. A measured value outside the printed min/max, a composition sum above 100%, or a reversed limit does.
Some decimals cannot satisfy the schema's multipleOf: 0.0001 check once they are IEEE floats. Those rows stay at the number that was read, schemaValid is false, and needsReview is true.
Tips
- Prefer a text-layer PDF when the mill can provide one. OCR is there for scans and is the slow part. Keep a scanned multi-page PDF inside the one-file OCR budget (120 seconds per page, 480 seconds per file) so it finishes inside the 900 second default run timeout.
- Keep memory at 1024 MB. The measured peak RSS on the 4-page Diler scan is in the cost table above; 1024 MB leaves room for Tesseract and the PDF renderer.
- Set a max charge on the run. The Actor checks the budget before it charges
document-processedandpage-processed.
FAQ, disclaimers, and support
Do I need a mill login or a website URL?
Paste a direct PDF link, or upload the file. The Actor reads that file and stops. Certificates you upload can contain names of signatories and customer staff. That is personal data. Process only files you are allowed to use.
Will a phone scan validate?
Use the prefilled text-layer sample when you want a schema-valid result. A phone scan can return heats and chemistry with empty cells, schemaValid: false, and needsReview: true. See Phone scans and OCR above. The Diler scan is that optional check. It is not the prefilled run.
The VDA schema files under schema/ are MIT licensed, copyright Verband der Automobilindustrie e.V. The Diler ground truth and PDF under data/benchmark/ are from GoSmarter.ai, also MIT. See the LICENSE files next to those copies.
Questions and bugs belong on the Actor's Issues tab. Programmatic runs are described on the API tab.
Local checks
pip install -r requirements.txt -r requirements-dev.txtpython -m pytest -qpython scripts/benchmark.py
The benchmark writes samples/benchmark_report.json.