With Mercuryo Statements, you can turn a raw bank or exchange statement into a file that's ready to upload to Microsoft Dynamics 365. Rules label every line the tool recognises. You review the lines it doesn't. One click produces the fixed 25-column workbook accounting expects.
When you label a payment, you can save that decision as a rule. From then on, every statement that contains that payment labels itself β a decision made once is never made again.
Note: All examples and screenshots in this guide use fictional demo data β invented companies, vendors and amounts such as "MoneyTea Ltd", "Nordwind Consulting OΓ" or "Bybit". Your screens will show your real data.
Each account has one of three roles:
| Role | What it can do |
|---|---|
| viewer | See everything and download exports. No changes. |
| user | Day-to-day work: upload statements, label lines, create rules, manage accounts. New rules wait for an admin's approval. |
| admin | Everything above, plus approving people and rules, deleting data, format settings and backups. Admin rules take effect immediately. |
To change your password, choose Account β My Account in the top-right corner.
The header shows the whole workflow as a map: Reference Data β Bank Accounts β Intercompany β Create New Rule β Rules β New Statement β Review β Export. Click any step to jump to it.
Review and Export stay dimmed until you open a statement. After that, the dot next to Review is amber while lines still need your attention, and green when everything is resolved.
Your daily routine is three steps: upload β review β export. Reference data and rules are occasional maintenance, not everyday work.
In the top-right corner: the light/dark theme toggle, the Admin Panel menu (admins only) and the Account menu.
Reference Data holds the dictionaries every statement is matched against. Each list is an .xlsx file that you upload once and refresh whenever it changes in Microsoft Dynamics 365:
To update a list, upload a fresh file over it. The new file replaces the old contents, and the date next to the list shows when it was last touched. Keep each file in its agreed template β same columns, one sheet per entity where noted.
Tip: Vendors, customers and merchants can carry an Aliases column β alternative spellings, separated by commas. Vendor and customer aliases match as fragments. Merchant names match whole words only, so a short name can't hide inside an unrelated word.
Note: If a list hasn't been refreshed for 3 months, an amber question appears under it. If the list is still accurate, click Yes, keep it β the question goes quiet for the whole team for another 3 months.
Every list in Reference Data has a source list in Microsoft Dynamics 365. When something changes there, export it and upload it here.
Important: Don't export through Cash Management β Reports. Reports are printable forms β they paginate, truncate long lists and produce PDFs this tool can't read. Use Open in Excel instead, as described below.
Microsoft Dynamics 365 shows one company at a time, and the Vendors, Customers and Bank Accounts uploads expect one file with a sheet per legal entity.
These lists live under Dimensions and are global β one sheet covers all entities.
| Microsoft Dynamics 365 page | Reference Data slot | File shape |
|---|---|---|
| Vendors | Vendors | one sheet per entity |
| Customers | Customers | one sheet per entity |
| Bank Accounts | Bank Accounts | one sheet per entity |
| Dimensions β MERCHANT | Merchants | single sheet |
| Dimensions β COSTCENTRE | Cost Centres | single sheet |
| Dimensions β ACQUIRER | Acquirers | single sheet |
| Dimensions β PRODUCT | Products | single sheet |
| Dimensions β EXCHANGE | Exchanges | single sheet |
| Chart of Accounts | GL Codes | single sheet |
Tip: After you upload a fresh list, open the current statement and click Reapply Rules to run the new names against lines that are already imported.
Bank Accounts is the register of the group's own fiat accounts, exactly as they exist in Dynamics. With it, nobody has to open Dynamics just to look up an account code: pick Bank β Account when you upload a statement, and the export's Account No. fills in by itself.
Note: Search filters the table across every column. Edit can move an account to another entity β the name rebuilds itself. Moving or deleting is blocked while uploaded statements still reference the account; this protects statements that are already processed. The full account register sits behind an All accounts toggle so the section opens compact β click it to expand and search.
Below the fiat register, admins manage the Bron custody vaults and their per-wallet Dynamics codes β the Account No. the tool stamps on every Bron row.
Note: Both lists sit behind All vaults / All codes toggles, same as the fiat register.
With the Intercompany lists, a payment between group companies posts to the partner's intercompany account instead of a vendor. Both lists are editable on the page β no code involved.
Each row is one group entity: the name to look for and the account to post to. Most entities post to their 1-16-0xx account; a few are set up as Vendors β that's an accounting decision, so the type is editable. When a fiat line mentions a group entity, it posts to that entity's account automatically and turns amber for a quick look in Review.
Note: The match deliberately skips three cases: the statement's own entity (its name appears in its own statements constantly), the statement's own bank (the group runs a bank that shares a group name), and lines that mention two different group entities β those wait for you in Review instead of being guessed.
This list controls the partner journal sheets in the export. When a statement posts rows to a partner's 1-16 account, the export adds a mirror sheet for that partner β for example, "MM>MT IC". An entry here matches the row's Merchant or its Acquirer (Unlimint, for instance, sits on rows as an acquirer) and decides where its journal rows settle β usually 1-10-104, but any account works, including a Vendor. Fields you leave empty are copied from the original row.
Where a journal row's account comes from, in order: a mapping from this list β the vendor named in the description, looked up in the partner's own vendor list β for a plain transfer with no product/merchant/acquirer, 1-10-300. A row that does carry a merchant, acquirer or product but matches nothing is left with an empty account and a yellow highlight β the tool never guesses an account for it.
If a journal row appears yellow with an empty account, its merchant or acquirer is missing from this list. Add it, then download the export again β no re-upload needed.
A rule says: when a line's description contains this text, label it this way β posting account, counterparty, merchant, product, cost centres. The text is matched anywhere inside the description; wildcards aren't needed.
Every line of every statement goes through the same sequence:
Note: If your role is user, a new rule waits for an admin's approval before it starts labeling. You'll see it as pending in the Rules list.
The Rules list is behind a Show rules toggle. Open it and it shows the 20 most recent rules β enough to see what you just added. To reach any other rule, type into Search (it matches the text, the details and the entity) or pick a Legal Entity: the list opens itself and shows every match. This keeps the page fast even with hundreds of rules.
A crypto description is whatever the exchange happened to print, so crypto rules don't read text. A crypto rule matches on Exchange, Payment Type (DEP/WD), Currency β and one identifying key:
Note β Kraken deposits: the tool resolves the real sender of every uncommented deposit from its transaction hash (via the blockchain explorer) and applies address rules to that sender. The description, however, always shows the address the deposit arrived at β the raw file's INFO column β never the sender.
Note: A crypto rule fires only on its own exchange, and crypto rules never affect fiat statements.
Cut the text down to the part that never changes. Drop invoice numbers, dates and references; keep the wording that repeats. "ACME PROCESSING settlement" is a good rule. "ACME PROCESSING settlement w19 inv 2210-A" will match once and never again.
The Rules section lists every rule in force β searchable, filterable by entity. Edit loads a rule back into the form; Copy loads it as a new rule β change the one thing that differs (a code, the match text) and Save, instead of re-typing a near-identical rule from scratch.
The format is detected automatically β the parser finds the transaction table by its column headers, in several spellings and languages. If the file has several sheets, each sheet becomes its own statement; name the sheet tabs after the Bank Account names, and each sheet links to its account by itself.
Details the parser handles for you:
Note: Cancelled, Rejected and Failed rows (Scrypt, Kraken and any exchange with a Status column) are dropped on import β the transaction never settled, so it never reaches Dynamics. The count shows in Check File and in the upload result, so you can see exactly how many were removed.
Click Check File next to the upload button. It runs the full parser without importing anything and reports what it saw: which columns it recognised, how many rows parsed, what would be skipped and why. For Bron files it also counts the spam it would remove and lists missing B-codes. For a PDF it shows a masked preview β digits become 9, letters become x β so a broken file can be debugged without its contents going anywhere.
Tip: When a bank changes its export format, run Check File first and upload second.
Bron is the group's custody platform. Its export is built from events β a transfer and its network fee arrive as separate rows β so the tool parses it with a dedicated parser and does most of the old hand-work automatically.
Custody wallets attract on-chain dust and scams. The import removes what is certainly noise and flags what needs your judgement:
Note: Every removed row is counted in the upload summary and in Check File, and the export's Raw Statement tab keeps the untouched original. Nothing disappears silently.
Deposits are recognised by the sender's address, withdrawals by the destination β so ordinary address rules work on Bron. The OTC vaults are different: one address serves several terminals, and the address alone can't tell the deals apart. Your notes can.
Note: The counterparty's Address Book name travels along as the row's comment and is searched against Vendors and Customers β matches arrive amber. When money arrives from an address you only ever send to, the comment says "known address β¦" β usually a refund.
After processing β or after clicking Review on a statement in Uploaded Statements β you land here. The progress bar shows how much of the statement resolved itself. Each line carries a status:
| Status | Meaning | What to do |
|---|---|---|
| confirmed from history | A rule matched. | Nothing. |
| matched by name | A known name was found in the description β a guess. | Check it; fix if wrong. |
| unmatched | Nothing recognised the line. | Label it. |
| confirmed | A person confirmed the line. | Done. |
Note: If the import removed any rows that never settled or look like spam β a cancelled, failed or rejected transaction, a zero-value row, or an address-poisoning look-alike β the summary shows a red β N dropped count at the end. Those rows are not in the table and are never exported; hover the count to see why they were removed.
Every cell is editable in place. The Counterparty and Merchant fields are searchable β start typing to filter the list, or scroll it as before. For a payment that repeats, don't fix cells by hand β make a rule instead:
The Translate button saves a description-translation rule instead β for
statements whose wording needs a fixed rewrite, such as standard Russian fee phrases.
Translate rules accept * wildcards for the changing middle:
"Π·Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ Ρ * ΠΏΠΎ *" becomes "for the period from $1 to $2", and Russian month names turn
into English on their own.
Some lines arrive with a marker in the comment β it also shows in the export's Amount column:
| Marker | Meaning |
|---|---|
| SPAM? | An incoming crypto deposit under $1.5 β probably dust. You decide. Withdrawals are never flagged. |
| DANGER! | Bron's risk engine flagged the sender. The money moved, so the row stays β label it yourself. |
| POISON? | The address imitates one the tool knows. On exchanges other than Bron this is a warning only. |
| SWAP | A transfer between the group's own vaults. Already labelled. |
| known address: β¦ | No rule matched, but the address is known from the opposite direction β usually a refund. |
| vendor in <entity>: β¦ (No.) | Bron only: the counterparty looks like a vendor of another group company. A hint with its vendor number β the row stays unmatched; you decide. |
Note: A line carries a Merchant or an Acquirer β never both. If a merchant won't save, an Acquirer is already on the line.
Note: A vendor line's Posting Type is set by the money direction, not by the rule β money out to a vendor is PAYMENT, money in from a vendor (a refund) is REFUND. So a single PAYMENT rule per vendor is enough: the tool flips it to REFUND by itself on an incoming line β you don't need separate refund rules. (A rule that sets some other Posting Type is left as-is.)
Download for Dynamics 365 produces the finished workbook: the fixed 25 columns in the exact order Dynamics expects, colour-grouped headers, frozen header row, capitalised account types, 2 decimals for fiat and 5 for crypto.
Every upload lands here β across all users β with its entity, type, row count and an auto-delete countdown. Reopen any statement for review, or delete the ones you no longer need.
Important: Statements delete themselves 30 days after upload, together with their transactions. The countdown turns amber under 3 days. This is by design: the tool is a processing station, not an archive β source files live in the banks, results live in Dynamics. Rules, reference data and bank accounts are never auto-deleted.
Delete and Delete All ask for a 5-second timed confirmation. Deletion is permanent.
Backup β downloads every rule and reference list as one .xlsx. Do this regularly; it's the team's insurance copy of everything that isn't auto-deleted.
Team Access β everyone who has ever registered, with their role and status. From this table you can:
Note: Only the primary admin can grant or revoke the admin role. Destructive actions ask for a 5-second timed confirmation.
Statements Format Management β how each raw format is parsed. Three parts:
| Symptom | What to do |
|---|---|
| "Could not recognise a transaction table in this file" | The parser didn't find a header row it knows β usually a new bank with new column names. Send the file's column headers to whoever maintains the tool; teaching it takes minutes. |
| A line got the wrong counterparty | That's an amber name guess β a known name happened to appear in the description. Fix the cell, or make a rule; rules always override guesses. |
| A new rule doesn't label anything | If your role is user, the rule may still be pending approval. Also check the match text isn't over-specific, and click Reapply Rules on the open statement. |
| Account No. is empty in the export | No Bank Account was picked at upload. Add the account, then upload the statement again with Bank β Account selected. |
| A statement disappeared | Statements auto-delete 30 days after upload. Re-upload from the source file if needed. |
| Can't delete or move a Bank Account | Uploaded statements still reference it. Delete those statements or wait out their 30-day retention. |
| A crypto statement has fewer rows than the raw file | The import removed rows that never settled or are spam β Cancelled/Failed/Rejected, $0 rows, poisoning twins, danger dust. The Review summary shows a red β N dropped count, the export's Dropped tab lists each removed row with its reason, and the Raw Statement tab keeps every original row (spam tinted light red). |
| Can't set a Merchant on a line | The line already carries an Acquirer, and a line carries only one of the two. Clear the Acquirer, or fix the rule that sets it. |
| A Bron export shows empty Account No. on some rows | The vault is missing a B-code for that asset and network. Check File names the missing pairs; add them in Bron Bank Accounts and download the export again. |
| "This file is for vault X, but you picked Y" on a Bron upload | The file's own account name doesn't match the vault you picked in Bron Vault. Check which month/vault the file actually is, pick the matching vault (or the right legal entity), and upload again. |
| An export is missing a new feature (Address column, Dropped tab, spam highlight, rebuilt descriptions) | Those are built at import, so statements uploaded before the feature appeared don't have them. Re-upload the statement β rules re-apply automatically, so nothing is lost. Anything built at export (IC journals, Document No. truncation) only needs a fresh download. |
| The Rules list shows only 20 rules | By design: the 20 most recent are shown. Type into Search or pick a Legal Entity β the list opens itself and shows every match. |
| "Too many attempts" at login | 10 failed logins in 15 minutes lock the pair of your address and email. Wait out the timer shown and try again β a successful login clears the counter. |
| A PDF statement is rejected | Only ANNA bank statements are accepted as PDF (it's the one bank with no xlsx/csv export). For any other bank, download the xlsx or csv version. |
| An upload fails with "file too large" | Uploads are capped at 50 MB. Export a shorter period from the bank/exchange and upload it in parts. |
| An IC journal row is yellow with an empty account | Its merchant or acquirer isn't in the IC journal merchants list (or the vendor has no code in the partner's books). Add the mapping, then download the export again β no re-upload needed. |
| A row is highlighted light-yellow and its tooltip says "Rule conflict" | Two or more equally-specific rules matched that row but set different values, so the tool applied one of them arbitrarily. Hover the row to see which rules and which field disagree, then fix or delete the losing rule. Rules that agree are never flagged. The same light-yellow tint and a cell note appear in the exported Upload sheet. |
| An Unlimit bank charge went to 7-06-100 instead of my charge rule's account | This is deliberate. When a bank fee's description ends with the Reference number of a payment from the same statement and that payment is matched to a Vendor, or is a salary/tax payment on a G/L account starting with 2-, the fee is that payment's bank charge and is posted to 7-06-100 with Cost Centre FINANCE and an empty Product β overriding any charge rule. A charge tied to any other row, or with no matching payment in the file, keeps its ordinary rule label. |
Note: Anything not covered here β ask the tool's maintainer. This guide grows together with the tool.