Business PDF Field Extractor avatar

Business PDF Field Extractor

Pricing

from $8.50 / 1,000 document rows

Go to Apify Store
Business PDF Field Extractor

Business PDF Field Extractor

Give PDF addresses and get fixed fields back: invoice and purchase order numbers, dates, parties, totals, and line items, plus contract parties, dates, term, renewal, notice, and governing law. Reads scans with OCR. No AI and no API key.

Pricing

from $8.50 / 1,000 document rows

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Features

Limited permissions

Share

Give PDF addresses and get fixed fields back as rows. Invoices and purchase orders return numbers, dates, parties, totals, line items, and a check that the amounts add up. Contracts return parties, dates, term, renewal, notice days, governing law, and which standard clauses appear. Text PDFs and scans both work. You pay per document read, and Mamba Labs pays the platform costs.

Features

  • The same columns on every run. Text extractors return a page of text; this returns document_number, total, due_date, and so on, so a table or a Clay column does not change shape between files.
  • Line items. Read from the table on the document, across pages when the header repeats, as a line_items field and as free rows.
  • A totals check. totals_check says whether subtotal, tax, shipping, and discount add up to the total. A mismatch tells you to look at that document.
  • It says what it did not find. fields_found and fields_missing are on each row. A missing value is null, never a guess.
  • Contract triage. Parties, effective and end dates, term wording, renewal, termination and renewal notice days, governing law, contract value, bid due date, and 16 standard clause types with an excerpt and page number. template_placeholders counts blanks, so an unfilled template is visible.
  • Scans. A page with no text layer goes through OCR at 200 dpi, charged per page, with a per file cap.
  • Label words beyond English for invoices and purchase orders: Dutch, German, and French were tested on real samples; Spanish and Italian labels are in the rules but were not tested. Contract rules read English only.
  • No AI and no API key. The same file gives the same output, and your documents go to no outside service.

How the data is read

The actor downloads each address directly, and retries through the Apify proxy pool if the host refuses that. It never uses residential proxies. Poppler reads the text layer with its column layout, and Tesseract reads scanned pages, both inside the run. Fields come from known labels and column position. No login, no key, no AI, and no other developer's actor. Document text is not written to the log.

Input

FieldTypeDefaultWhat it does
pdf_urlsarrayWeb addresses of PDF files, up to 1,000. Each file up to 40 MB. The address must answer without a login. In Clay, put the column in a one item list.
pdf_filestringOptional. One PDF file from your computer, stored in your Apify account.
document_typestringautoauto (default) works it out per file. Set invoice, purchase_order, or contract to read every file as that type.
date_orderstringmdyHow to read a date such as 03/04/2025 when both readings are valid. mdy (default) reads March 4, dmy reads 3 April. Unambiguous dates ignore this.
read_scansstringyesyes (default): a page with no text layer goes through OCR, charged per page. no: those pages are skipped and the row says so.
ocr_languagestringengLanguage of scanned pages: eng (default), deu, fra, spa, nld, ita, or por.
max_pagesstring50Pages to read per file, up to 500. Default 50.
max_ocr_pagesstring10Scanned pages to read per file, up to 100. Default 10. This caps the OCR charge per file.
max_documentsstring100Files to read in this run, up to 1,000. Default 100.
line_item_rowsstringyesyes (default): each line item is also its own free row, which suits CSV and Clay. no: line items stay in the line_items field only.
include_textstringnoyes: add the document text to the row, up to 200,000 characters. Default no.
max_charge_usdstringOptional. The run stops before a charge that would pass this amount. Summary rows are always returned.

Output

FieldTypeWhat it holds
row_typestringOne of: document, line_item, ocr_page, run_summary. run_summary is the one free row written when the input is refused.
file_urlstringThe address this row came from.
document_typestringinvoice, purchase_order, contract, or other. Other returns no fields.
pages_totalintegerPages the PDF reports.
pages_readintegerPages whose text was read, from the text layer or OCR.
pages_ocrintegerScanned pages read by OCR. Each one is charged as ocr-page.
text_sourcestringtext_layer, ocr, mixed, or none.
page_numberintegerOn an ocr_page row: the page that was read.
document_numberstringInvoice number or purchase order number.
document_datestringInvoice date or order date as YYYY-MM-DD.
due_datestringPayment due date as YYYY-MM-DD. Invoices.
delivery_datestringRequested delivery date as YYYY-MM-DD. Purchase orders.
po_numberstringThe purchase order or order number the document cites.
seller_namestringThe issuer on an invoice, the supplier on a purchase order.
seller_addressstringThe address lines under the seller, when labeled.
seller_tax_idstringA VAT, GST, EIN, or ABN value next to its label.
buyer_namestringThe billed party on an invoice, the ordering party on a purchase order.
buyer_addressstringThe address lines under the buyer, when labeled.
ship_tostringThe ship to or deliver to block.
payment_termsstringPayment terms as written, such as Net 30.
currencystringISO code, from a code or symbol on the document. A bare $ reads as USD.
subtotalnumberAmount before tax.
discountnumberDocument level discount.
taxnumberTax amount.
shippingnumberShipping or freight amount.
totalnumberDocument total.
amount_duenumberAmount or balance due, when stated apart from the total.
line_itemsarrayLine items on the document row: line_number, item_code, description, quantity, unit, unit_price, discount, tax_rate, amount.
line_item_countintegerHow many line items were read.
totals_checkstringmatch: subtotal plus tax and shipping less discount, or the line items, equal the total. lines_differ: the header adds up but the line items do not, so some lines were probably not read. mismatch: the amounts do not add up. not_checked: too few amounts were read.
line_items_sumnumberThe line item amounts added up.
line_numberintegerOn a line_item row: position in the table.
item_codestringOn a line_item row: SKU, part number, or item code.
descriptionstringOn a line_item row: the item description.
quantitynumberOn a line_item row: quantity.
unitstringOn a line_item row: unit of measure.
unit_pricenumberOn a line_item row: price per unit.
line_discountstringOn a line_item row: discount as written.
tax_ratestringOn a line_item row: tax rate as written.
line_amountnumberOn a line_item row: line total.
contract_titlestringThe title line of a contract or bid document.
partiesarrayParty names from the by and between sentence or defined party labels.
effective_datestringContract effective date as YYYY-MM-DD.
expiration_datestringStated end date as YYYY-MM-DD. Null when the term is only a duration.
term_textstringThe sentence that states the term, up to 400 characters.
term_monthsintegerThe term in months when the wording states a duration.
renewalstringautomatic, optional, or none_found, from the wording.
termination_notice_daysintegerDays of notice in the first sentence about termination that states them.
renewal_notice_daysintegerDays of notice in the first sentence about renewal that states them.
governing_lawstringThe jurisdiction named in the governing law wording.
contract_valuenumberAn amount next to wording such as total contract price, fixed fee, or not to exceed.
bid_due_datestringProposal or bid submission date as YYYY-MM-DD, on a bid document.
clauses_foundarrayWhich of 16 standard clause types appear in the wording. Keyword rules, not legal review.
clause_excerptsarrayFor each clause found: clause, page, and an excerpt of up to 300 characters.
template_placeholdersintegerCount of blanks and insert markers. A high count means an unfilled template.
fields_foundarrayThe fields for this document type that hold a value.
fields_missingarrayThe fields for this document type that were not found on the document.
full_textstringThe text of the document up to 200,000 characters, only with include_text yes.
row_statusstringok, or why this row carries no data: no_results, no_change, partial, blocked, or error.
error_reasonstringWhy the row is not ok. A refused input reads input_invalid: followed by what to fix.
billable_events_jsonstringWhat this row was billed as, for example {"document-row":1}. {} means free.
scraped_atstringWhen the row was written, UTC.

Pricing

Pay per event. You pay for each PDF with at least one field read, each scanned page read by OCR, and the run start. Line item rows, a document with no fields read, a failed download, and a refused input are free.

EventFree planBronzeSilverGold
document-row, one PDF with at least one field read$0.01$0.0095$0.009$0.0085
ocr-page, one scanned page read by OCR, charged when OCR returned text$0.015$0.01425$0.0135$0.01275
apify-actor-start, once per run (one per GB of memory; the default 1024 MB is one)$0.004$0.004$0.004$0.004

Per 1,000 rows of document-row: $10.00 on the free plan, $8.50 on Gold.

Free plan cap: 1.50 USD of evaluation a month, about 150 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.

Mamba Labs pays the platform costs of your run, Apify proxy traffic included.

Usage examples

Invoices and purchase orders.

{
"pdf_urls": ["https://docs.oasis-open.org/ubl/cd-UBL-1.0/fs/Order/pdf/OfficeOrder.Example-us.pdf"],
"document_type": "auto"
}

European invoices. Set date_order to dmy so 03/04/2025 reads as 3 April.

Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list.

MCP. The Mamba Labs MCP server @mambalabsdev/mcp-business-pdf-field-extractor exposes this actor to Claude and other MCP clients.

Error handling

CaseWhat you get
Missing or unreadable inputOne free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start
Download failed, not a PDF, over 40 MB, or a passwordOne free document row with row_status error or blocked and the reason
No field label found, or a type this actor does not readOne free document row with row_status no_results. OCR pages already read stay charged
Pages left unread by max_pages or max_ocr_pagesrow_status partial, charged, and error_reason says how many
The run is close to its timeoutThe actor stops starting new work 90 seconds before the timeout and delivers what it has

Limitations

  • Fields come from labels and column position, with no AI. On a layout with unusual labels a value can be missing, and on a crowded layout it can be wrong. Check totals_check and fields_missing, and review before you pay or sign anything.
  • Seller and buyer names are the least reliable fields. A name with no label next to it is taken from a company suffix such as Inc or B.V., and a name inside a logo image on a text page is not read.
  • Line items need a header row with column names. A list of charges with no table header returns no line items.
  • OCR accuracy follows scan quality. Skewed or low resolution pages read poorly, handwriting is not supported, and a single digit inside a bordered table cell can be lost, which leaves quantity null on that row. English and Dutch scans were tested; the other OCR languages are installed but were not tested.
  • Clause detection finds keywords in the wording. It is not legal review, and it can flag a clause that is only mentioned in passing.
  • A bare $ reads as USD, so Canadian or Australian dollars need the code on the document.
  • Tested on 11 invoices from a public parser test set, 6 sample purchase orders, and 6 published contract templates. Filled contracts were tested on one document written for the test. Bank statements are out of scope and return no fields.
  • The address must answer without a login. Files over 40 MB are refused.

Mamba Labs actor suite

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Built by Mamba Labs.