Customs correspondence automation starts from a very ordinary moment: a letter from a customs office in another country lands in the inbox, written in Polish, Romanian or German, about a transit movement that closed months ago. Somewhere in it are an MRN, a guarantee reference, a few dates and a request, and one of those dates decides whether the company has to pay. For a customs guarantee and transit service provider in the Baltics, these letters are routine. We built an assistant that reads each letter, lets code calculate the deadlines under EU customs law, and prepares two drafts for a specialist to check: one to the client and one back to customs.
The problem: why customs correspondence automation is harder than it looks
A transit guarantor sits between its clients (carriers and customs brokers) and the customs authorities of every country their trucks cross. When a movement is not discharged, the letters start.
- Any language, any layout. Each office of departure writes in its own language and format, so the same facts sit in a different place every time.
- Different deadlines for different letters. In an enquiry procedure the holder has 28 days to provide proof. A notice to the guarantor and a demand for payment come with their own reply dates written in the letter.
- Customs deadlines matter too. Under Article 85 of Delegated Regulation (EU) 2015/2446, customs must notify the guarantor of non-discharge within nine months and of the amount within three years, or the guarantor is released. Spotting that takes careful month arithmetic.
- Two audiences, two languages. The proof has to come from the client, often in Turkish, Ukrainian or Russian, while the reply goes to customs in the customs office’s language.
- No single view of open cases. Letters live in mailboxes and folders, so the nearest deadline is easy to miss.
What we built
The assistant takes a customs letter as it arrives, including a client’s forwarding note on top, and works through it in five steps:
- Reads and extracts. The model identifies the letter type (enquiry to the holder, notice of non-discharge to the guarantor, or notification of the amount due) and extracts the MRN, GRN, customs offices, declaration date, presentation time limit, amount, stated reply date and requested documents. It also lists what is missing.
- Calculates deadlines in code. The model does not count days. Deterministic rules do: 28 days from the request under Article 310 of Implementing Regulation (EU) 2015/2447, nine months from the presentation time limit and three years from acceptance of the declaration under Article 85 of Delegated Regulation (EU) 2015/2446. Each deadline shows its legal basis, plus an internal date for the client’s documents.
- Flags late notifications. The code compares the date of the customs letter with the nine-month and three-year limits. If customs notified the guarantor late, the case is marked as an Article 85(3) argument, with the number of days. Where the letter alone cannot answer, such as whether an earlier notice arrived in time, the case is marked “check” instead of guessed.
- Drafts both letters. The model writes a request to the client in the client’s language, with the documents to send and the internal deadline, and a formal reply to customs in the language of the customs letter, quoting their reference, the MRN and the GRN. It only restates the deadlines the code calculated. A reply to a demand for payment asks for the calculation and the earlier notice, without admitting liability. A Lithuanian translation is available for the specialist.
- Keeps an open-case register. Every letter becomes a row, sorted by the nearest deadline and coloured when seven days or fewer remain, with a CSV export that opens in Excel.
The test pack has four fictional letters in Polish, Lithuanian, Romanian and German: an enquiry under the 28-day rule, a notice to the guarantor sent in time, a notice sent 42 days after the nine-month limit, and a demand for payment where the earlier notice must be checked in the archive. The client drafts came out in Lithuanian, Turkish, Ukrainian and Russian. The deadline rules are covered by 38 automated checks that run without the model, including month-end and leap-year dates.

What changes for the customs team
| Before | With customs correspondence automation | |
|---|---|---|
| Reading the letter | Translate it, find the MRN, GRN and dates, retype them | A structured case card with every key field and a list of what is missing |
| Reply deadline | Counted by hand from the letter date | Calculated by code with the article next to it, plus an internal date for the client |
| Late notice to the guarantor | Depends on someone remembering Article 85 | Nine-month and three-year limits checked on every letter, with the days late shown |
| Letter to the client | Written from scratch, often in a foreign language | A draft in the client’s language with the documents to send and the date |
| Reply to customs | Assembled from old letters and templates | A formal draft in the customs office’s language, referencing their letter, MRN and GRN |
| Overview of open cases | Inbox folders and personal spreadsheets | One register sorted by nearest deadline, exportable to Excel |
Where people stay in control
The split is deliberate. The model reads and drafts. Code calculates every date and every check, the same way for every letter, and shows the article it relied on. The specialist reviews the extracted facts, edits both drafts and decides what is sent. Nothing is sent automatically. The client letter never mentions the late-notification argument.
The limit is honest too: the code treats the date of the customs letter as the notification date. When dispatch and receipt dates differ, or when an earlier notice may sit in the archive, a person has to confirm the dates before relying on Article 85(3). The rules follow the regulation text and should be checked against the current version on EUR-Lex before use in live work.
Where else this works
The same split, model reads and drafts while code owns the deadlines, fits any team answering authority letters against legal time limits:
- Customs brokers and freight forwarders: queries on import declarations and post-clearance requests.
- Surety and insurance providers: claim notices where contractual or legal notice periods decide whether the claim stands.
- Accounting and tax advisory firms: tax authority enquiries for many clients, each with its own deadline.
Related use cases: KYB document check automation · Freight quote automation · Insurance policy document extraction. All Contracts & documents to data use cases · How we deliver this: Custom AI solutions
FAQ
How long does the holder have to reply in a transit enquiry procedure?
Under Article 310 of Implementing Regulation (EU) 2015/2447, the holder of the procedure has 28 days from the request to provide information or proof that the procedure ended correctly. The letter usually states this, and our assistant calculates the exact date from the letter date.
When is a transit guarantor released if customs notifies it late?
Under Article 85 of Delegated Regulation (EU) 2015/2446, customs must notify the guarantor within nine months of the time limit for presenting the goods that the procedure was not discharged, and notify the amount due within three years of acceptance of the transit declaration. If either notice is late, the guarantor is released from its obligations under Article 85(3).
Can AI reply to customs letters automatically?
It can draft the reply, but it should not send it. In our build the model reads the letter and writes the drafts, code calculates the deadlines and checks, and a specialist edits and sends both letters.
How many customs letters is your team answering by hand each month? Talk to us