# Every attachment, LLM-ready

PDFs, spreadsheets, slide decks, even scanned contracts arrive as clean Markdown before your webhook fires. No parser to run, no OCR vendor to wire up.

[Get started](/signup)
[Documentation](https://docs.aiinbx.com/guides/attachments)

Example: Marco's reply carries a PDF quote, a price-list spreadsheet and a scanned, signed framework agreement. Each arrives as Markdown for your agent: the quote's line items as a table, the workbook's sheet as a table, and the scanned contract read by OCR into its heading and clauses.

Why it matters

## The answer is in the attachment

Quotes, invoices, contracts, CVs — the email is two lines and the thing it is about is the file. An agent that is only handed its name can do one thing with it: ask for it again.

Two agents get the same reply, “Hi Nora, our quote is attached.” Handed only the filename Quote-4471.pdf, the agent asks Marco to paste the prices into the email. Handed the document as Markdown, it places the order: “€4.20 a sheet works for us — please go ahead with all 500.”

Use cases

## Wherever the work arrives as a file

### Accounts payable

Books every invoice that lands in billing@, matched to the order it belongs to.

### Procurement

Lays three supplier quotes side by side and says which one to take.

### Order entry

Turns the spreadsheet a customer orders with into order lines. Nobody retypes 140 rows.

### Recruiting

Reads every application against the role and drafts the reply the same day.

### Contracts

Checks the signed copy that comes back against the draft you sent, clause by clause.

### Support

Answers the question a customer attached their export to.

Scans

## Even the page that went through a scanner

The contract that went out as a PDF comes back printed, signed and scanned. Typed pages are read as they are, and only the scanned pages go through OCR — built in, so there is no OCR vendor to wire up, and one signed page never slows down the rest.

Example: Contract-signed.pdf has 6 pages. The typed pages are read as text and only the 2 scanned pages go through OCR, and the whole file comes out LLM-ready.

Formats

## Whatever they attach

Tables stay tables, headings stay headings, and every sheet of a workbook comes through. Nothing to configure per format — if it has text in it, your agent gets the text.

-   .pdf
-   .docx
-   .xlsx
-   .pptx
-   .csv
-   .doc
-   .odt
-   .rtf
-   .epub
-   .ods
-   .ppt
-   .odp
-   .html
-   .json
-   .xml
-   .txt

Images stay images — the original is one call away, ready for a vision model.

In your code

## LLM-ready before the webhook fires

Files are read while the mail is being received, so it never reaches you with a document still unopened. There is nothing to switch on and nothing to poll.

Step 1, email.received: event.data, posted once every file is read.

```
{
  "email_id": "eml_71ac",
  "attachments": [
    {
      "filename": "Quote-4471.pdf",
      "preparation": "ready"
    },
    {
      "filename": "Price-list-Q4.xlsx",
      "preparation": "ready"
    }
  ]
}
```

Step 2, your handler: no parser, no OCR vendor, no queue.

```
const email = await aiinbx.emails.retrieve(
  event.data.email_id,
  { include: ["attachment_content"] },
)

const documents = email.attachments.map(
  (file) => file.preparation?.text,
)

await agent.run([
  email.stripped_text,
  ...documents,
])
```

## Give your product an inbox. The hard parts are already handled.

[Get started](/signup)
