11 min read |

What Should Post By Itself, and What Should Wait

The auto-post envelope, the holds that explain themselves, and why a transfer with one leg missing is the most dangerous row in bookkeeping.

Watercolour illustration of a set of scales, ledger lines flowing freely down one side and a few lines paused behind a small gate on the other

Quick answer

Auto-post in IQ Books is off by default and has two settings when you turn it on: post at 90% confidence, or at 95%. Confidence alone is never enough, so seven categories are excluded whatever the score says: transfers, invoice and bill matches, split transactions, reverse-charge and postponed VAT, future-dated lines, lines with no category or a category a person has already changed, and anything outside the feed’s mapped accounts. Switching auto-post on never posts the backlog, because only lines created after the moment you enabled it are eligible. Anything held tells you why it is held, and every line auto-post did put through is listed with its confidence and method for the last seven days.

Both extremes are wrong

Full automation in bookkeeping fails for a boring reason: the cost of the errors is not symmetrical. A correctly coded stationery purchase saves you four seconds. A transfer between your own accounts posted as income overstates turnover, misstates VAT and survives until someone reconciles the other side. One of those is worth automating and one is not, and they arrive in the same list looking identical.

No automation fails for an equally boring reason: most bank lines are the same handful of merchants repeating, and asking a person to confirm the coffee shop for the four hundredth time is how review fatigue starts. By line three hundred nobody is reading.

So the useful question is not whether software should post on its own. It is where the boundary sits, and whether the boundary is written down somewhere you can read it.

The envelope

Auto-post in IQ Books has three settings and no others: off, post at 90% confidence, post at 95%. Off is the default and stays the default until you change it.

What the threshold actually means

Confidence is the score CodeIQ’s pipeline attaches to its own suggestion, and it is not a marketing number. A line matched to a pattern you have coded the same way thirty times scores very differently from one the semantic phase guessed at. Setting 95% means you are only automating the repeats.

The things that never post themselves

Confidence is necessary and nowhere near sufficient. A line can be scored at 99% and still be the wrong thing to post without a person. These are excluded whatever the score says.

ExcludedWhy
Anything identified as a transferA transfer has two legs and posting one alone creates a phantom sale or cost. It waits for its pair.
Anything matched to an invoice or a billAllocation decides which document is settled and by how much. Get it wrong and the debtor stays open while the cash disappears into a nominal.
Anything split across accountsA split is a judgement about proportion. There is no confidence score for that.
Reverse charge, postponed VAT accounting, domestic reverse chargeThese move figures into boxes on the VAT return that are painful to unwind after filing.
Lines dated in the futureA future-dated posting lands in a period you have not opened yet.
Lines with no category, or where a person already chose a different oneIf a human has overridden the suggestion, the human confirms it. That is the whole point of the override.
Anything on an account outside the feed’s own mappingAuto-post touches only the accounts the connection actually feeds.

Switching it on does not post the backlog

The trap this avoids

You connect a feed, pull three months of history, review none of it yet, then flip auto-post to 95% to see what it does. If the setting applied to everything already sitting there, you would have just posted a quarter in one click.

So the moment auto-post is first switched on is recorded, and only lines created after that moment are ever eligible. Your backlog stays exactly where it is, waiting for you. Turning the setting off and on again does not reset the clock backwards either.

Holds, and why every one of them explains itself

A held line is not an error. It is the software saying it has a specific reason to think this one is not finished. The Waiting panel lists them with the reason attached, which turns an unexplained queue into a short list of decisions.

The transfer whose other leg has not arrived

This is the hardest case in feed bookkeeping and it deserves its own section.

When you move money between two of your own accounts, the two sides rarely arrive at the same moment. One bank posts today, the other tomorrow. A card account and a current account can be days apart. If the first leg is coded and posted as a cost before its pair shows up, the pair then arrives looking like income, and you have manufactured both a fictional expense and a fictional sale that net to nothing and pollute every report in between.

The obvious defence is a word list: hold anything that says "transfer", "payment to savings", or names another of your accounts. That catches the easy half.

The half a word list cannot catch

A card processor paying out to your bank writes something like STRIPE PAYMENTS UK STRIPE XPODZ1PZ3359926052. The reference is different every single time and the word "transfer" appears nowhere. To a word list every payout is a brand new unknown merchant. To you it is the same movement you have booked eight times this month.

The fix is to learn from the books rather than from a dictionary. The description is reduced to its stable part by dropping the long tokens that contain digits, which turns eight unique references into one recognisable narrative. That narrative is then looked up against how the organisation has actually treated it before, using both legs of every transfer already posted. If the answer is consistently "this is a transfer", the line is held and told to wait for its pair.

Two properties make this safe to run unattended. A false positive costs a seven day hold and a question, never a wrong posting. And answering "not a transfer" once moves the ratio, so the same narrative is less likely to be held next time. It gets quieter as it learns, rather than louder.

Everything it did is listed

Automation you cannot audit is not automation, it is hope. Every line auto-post put through is recorded with the confidence it had, the threshold in force at the time, the method the pipeline used and the moment it happened. The last seven days of that are shown on the feed card as a list you can open with one click, so the first question after switching it on, "what has it actually been doing", has an answer that takes five seconds.

A sensible way to start

Run with auto-post off for a fortnight and watch the confidence scores on lines you would have been happy to post. Then set 95% and read the auto-posted list every morning for a week. If nothing in it surprises you, consider 90%. If something does, the override you make becomes a pattern and the next one is better.

The daily digest, off by default

You can have a short daily email covering what arrived, what posted and what is waiting. It is off unless you turn it on, and a quiet day sends nothing at all. An unattended process that emails you every morning to say it did nothing is a process you stop reading within a week.

See the envelope before you trust it

Connect a feed, leave auto-post off, and look at what the pipeline would have done. The setting is there when the answers stop surprising you.

Open IQ Books

Frequently asked questions

Is auto-post on by default?

No. It is off, and it stays off until you choose 90% or 95%. We would rather you turned it on after watching the confidence scores for a fortnight than have it running before you know what it does.

If I switch it on today, will it post the three months already sitting in drafts?

No. The moment you enable it is recorded, and only lines created after that moment are ever eligible. Your backlog waits for you. Turning it off and on again does not move that moment backwards.

What does 90% or 95% confidence actually measure?

It is the score the CodeIQ pipeline puts on its own suggestion, and it varies a great deal by method. A line matched to a pattern you have coded identically many times scores far higher than one the semantic phase inferred. Setting 95% means you are automating the repeats and nothing else.

Why will it not auto-post a transfer even at high confidence?

Because a transfer has two legs, and posting one without the other manufactures a cost or a sale that should not exist. The legs frequently arrive on different days, so the line is held until its pair shows up and then both are confirmed together.

How does it spot a transfer when the reference changes every time?

By reducing the description to its stable part, dropping the long tokens that contain digits, and then checking that narrative against how the organisation has actually treated it before. Both legs of every transfer already posted are in that history, so the receiving side learns from the paying side too.

What happens if it holds something that was not a transfer?

It costs you a seven day wait and one question. Answering that it is not a transfer lowers the ratio for that narrative, so it is less likely to be held next time. A false positive never produces a wrong posting.

Can I see what it posted without me?

Yes. The last seven days of auto-posted lines are listed on the feed card with the confidence each had, the threshold in force, the coding method and the time. Refusals are recorded too, with the specific reason, and shown in the Waiting panel.

Do I get an email about it?

Only if you ask for one. The daily digest is off by default, and a day with nothing to report sends nothing at all.