DoubleAgent Blog

I have completely rebuilt the way DoubleAgent handles receipts. It's easier to use and less confusing than before.

Why did I bother spending several weeks on receipts when FreeAgent has Smart Capture? Well, there are several scenarios which FreeAgent just doesn't handle – for example receipts by email, and receipts for transactions that haven't appeared in the bank feed yet – and these scenarios are actually pretty common. DoubleAgent supplies the missing features :)


Previously (and for reasons that made sense at the time!) DoubleAgent had two separate ways of handling receipts: the "receipt photos" feature and the "receipt emails" feature. The former was designed for paper receipts which you accumulate while out and about. The latter was designed for subscription services which send you a monthly receipt by email. And more recently DoubleAgent gained a sort-of hybrid of the two for one-off receipts by email.

It all worked...but it was confusing. I even found it confusing, on the odd occasion when something glitched and I had to dive into the code to investigate.


There's a single, unified way to handle receipts. It doesn't matter whether you photograph a paper receipt or forward in an emailed receipt – DoubleAgent has a single place to deal with them.

For receipts that you get emailed regularly, such as for web hosting, you can set up mail rules to direct them automatically to the right bank explanation in FreeAgent.

You can read the receipt docs here and try it out yourself!

Next time?

DoubleAgent doesn't try to extract the currency and amount from receipts but it would be nice if it did.

The reason it doesn't is because I thought it would be difficult to do 100% reliably, and unless it was 100% reliable it wasn't worth doing. Something that is correct 98% of the time lulls you into a false sense of security so you tend to miss the 2% that's wrong.

However I have never actually tried it. Perhaps I should!

You can now forward one-off, non-recurring receipts/invoices to DoubleAgent, which will hold them for you in one place. Then when it's convenient you can whizz through them all, sending each one to the right spot in FreeAgent.

It turns out this is quicker than starting in FreeAgent with an explanation or expense, and then trying to find the corresponding receipt/invoice among all your emails; and then clicking on the next explanation/expense and wading through your emails again, and again.

DoubleAgent has evolved two different ways of handling receipts: first came the receipt emails feature, which was designed to handle recurring receipts/invoices, e.g. your monthly web hosting invoice. You take the email from your supplier and forward it to DoubleAgent, where rules that you have set up attach the invoice to the appropriate bank transaction explanation.

Second came the receipt photos feature, which was designed for receipts you take photos of, allowing you to send them into FreeAgent quickly. These are almost always one-off purchases.

These two features work well but there's a gap: what do you do when you buy something online and the receipt/invoice is emailed to you? It's a one-off purchase, so you probably wouldn't have a Receipt Emails rule for it. And it's attached to an email (or is the email), so uploading it via Receipt Photos would be a bit awkward. It makes most sense to just forward the email to DoubleAgent, where you can upload it immediately just like a receipt photo. Which is exactly what you can now do.

The different ways DoubleAgent handles receipts came about for good reasons. I feel the next step is to unify them into one, intuitive way of handling all receipts, whether photographed or emailed, one-off or recurring. No promises on a release date though ;)

After a year long deprecation period, I have switched off the email address where originally you would forward your receipt emails.

I liked the user-facing simplicity of a single address along with the "magic" of figuring out whose each email was. But to avoid false positives (one user seeing another's email) the code had to be very conservative, which led to a few false negatives (email not getting linked to its owner at all).

Starting a year ago everyone has had their own unique forwarding address. This substantially simplifies the code, avoids any false positives or negatives, and is no less simple for the user.

It's nice to tick this off after waiting for a year!

When you subscribe to DoubleAgent, you set up a direct debit via GoCardless.

Until today I used DoubleAgent's own GoCardless integration to generate invoices for your subscription payments and email them to you. You could then either upload them to FreeAgent yourself or use DoubleAgent's receipt emails feature to forward the invoices back to DoubleAgent which would then upload them to FreeAgent for you.

This all worked well and it was satisfying to use DoubleAgent's own features to explain the billing payments. However a few aspects were less than ideal:

  • There's a delay of several days between the money leaving your bank account and the money arriving in DoubleAgent's bank account. That meant you would only receive your invoice several days after waving goodbye to the payment.
  • There was nowhere in DoubleAgent where you could view or download previous billing invoices.
  • You still had to upload the invoice to FreeAgent yourself, either manually or by setting up email forwarding and a receipt email rule.

That's all changed!

Here's how it works now:

  • DoubleAgent will generate the invoice before the money leaves your bank account.
  • DoubleAgent will automatically explain your subscription payment in FreeAgent and attach the invoice to it. (You can opt out of this.)
  • Should you need them, your previous invoices (and receipts!) are listed on the billing page.

The billing explanations' description and category default to "DoubleAgent" and "Computer Software" though you can customise these on the billing page if you want.

All this means that each DoubleAgent subscription payment will be automatically explained immediately, complete with its invoice, without any effort from you.

Hot on the heels of some recent improvements to the Receipt Emails feature, here are four more!

Unique forwarding addresses

Every user now has a unique email address to which they can forward their receipt emails. You can find yours on the Receipt Emails pages when you are logged in to DoubleAgent. They look like, where abc123 is different (and longer) for everyone.

Previously everyone forwarded their receipt emails to the same address,, and DoubleAgent would figure out whom the email was for. I thought it would be simpler for users this way, and I rather liked the "magic" aspect of it. But it relied on people creating verified senders in FreeAgent which was a little tedious. The new system is simpler all round.

Both systems are running side-by-side for now. Whenever DoubleAgent receives a receipt email at the old address,, it will process the receipt as normal and then send an email to the user explaining how to update their forwarding address.

Ideally everyone will switch to their unique forwarding address sooner rather than later, but to give anyone with a once-a-year email a chance to receive the change notification, the old address will keep running until 1 December 2023.

From polling to webhooks

Receipt emails sent to the new forwarding addresses will show up immediately in DoubleAgent. This is a nice contrast to the old address where emails can take up to 1 minute to appear.

This doesn't make any difference once your rules are set up the way you want, but when you are trying to get them right in the first place, it is very nice to have instant feedback.

Live updates to the list of received emails

The list of received receipt emails now updates itself automatically as new emails arrive. No need to keep refreshing the page while you wait for your email to reach DoubleAgent.

Gmail forwarding confirmation

When a Gmail user sets up a rule to forward emails somewhere, Google sends a confirmation email to the destination. The confirmation email contains a code and a link which you can click to confirm the forwarding.

Previously, DoubleAgent confirmed the forwarding for you behind the scenes. However that confused people about whether the confirmation email had been received or acted on.

Now, the confirmation email appears in the list of received receipt emails where you can view the confirmation code and/or click the confirmation link yourself. It's much clearer and avoids any confusion.

DoubleAgent's Receipt Emails feature has proved to be amazingly useful. To recap: you forward (automatically, ideally) to DoubleAgent the receipts or invoices you regularly receive by email from third-party services, and DoubleAgent attaches them to the appropriate explanation in FreeAgent.

Like most of DoubleAgent's features you set it up once and then forget about it. However if there was ever a hiccup and a receipt couldn't be uploaded for some reason, subsequent receipts could end up attached to the wrong explanation. This happened a couple of times and it was fiddly to rectify.

To prevent this happening and to help you spot any receipts which need your attention, DoubleAgent now has:

  • timeframes for explanations;
  • notifications when no explanations appear in time;
  • a status filter for your emails defaulting to not-uploaded;
  • the ability to approve explanations in FreeAgent when receipts are attached to them.


Your receipt-email rules can now specify a timeframe for the matching explanation. In other words, you can say that the explanation to which the receipt should be attached must appear in FreeAgent within a certain number of days of the email. If a matching explanation arrives after your date range, for example the following month, the receipt will not be attached to it.


You can opt to receive an email notifying you if a suitable explanation doesn't appear in the timeframe you specified. You can then investigate while things are fresh rather than trying to unravel it all six months later.

Status filter

You can filter your list of receipt emails by status – uploaded, not uploaded, missing explanation, or no matching rule. The default view is not-uploaded so that when you look at the list you immediately see any emails which might need your attention.

Approving explanations

In order to check in FreeAgent that all necessary attachments are present and correct, some people like to mark as unapproved the explanations which will need an attachment – until the attachment is uploaded. DoubleAgent supports this by letting you specify that explanations should be approved when it uploads an attachment to them.

The Receipt Emails feature lets you set up rules for attaching emailed receipts for services you pay for, such as web hosting, to the corresponding explanations in FreeAgent.

Most people (including me!) use this for services billed monthly. Each time a new receipt email arrives, DoubleAgent looks for the next matching explanation without an attachment and uploads the receipt to it.

For example, in my rule for GitHub's receipts, I look for emails with a subject including the text "[GitHub] Payment Receipt" and bank explanations with a description including the text "GitHub".

This works perfectly because there's never any doubt about which explanation a receipt should be attached to.

But what if you're receiving several receipt emails a day – perhaps they are invoices for online sales you make – and you can't be sure the emails will arrive in the same order as the bank transactions? You could end up with receipts/invoices attached to the wrong explanations.

Until yesterday...

In your attachment rule, in the part where you specify which transaction explanations to look for, you can now get it to pull text from each individual email and look for that. (It's easier than I've made it sound.)

For example, let's say your receipt emails are order confirmations containing an order number; and that each sale's bank transaction contains the order number. You can have a rule which extracts the order number from the email and matches the specific transaction explanation with that order number.

This is the same extract-and-match technology which explainer rule descriptions have had for several years. Once you have wrapped your head around it, it can be super useful.

You can read more in the docs.

I thought it would be interesting to estimate how much time DoubleAgent has saved its customers so far.

The first step is to find out how many actions it has taken on their behalf.

Action Count
Bank transaction explanations created 518,000
Invoices created 26,000
Attachments uploaded 4,300
Receipt photos uploaded 3,100
Receipt emails uploaded 2,500

Looking specifically at the Stripe reconciliations:

Action Count
Stripe payouts explained 6,700
Value explained £5,900,000
Invoices created 24,100
Explanations created 91,300
Average (mean) number of explanations per payout 14

And now the GoCardless reconciliations:

Action Count
GoCardless payouts explained 1,200
Value explained £432,000
Invoices created 1,400
Explanations created 5,400
Average (mean) number of explanations per payout 4

Overall DoubleAgent has put 577,000 updates into FreeAgent on behalf of its customers. If we say that each update would have taken someone a minute to perform, that's 9,600 hours saved – a significant amount of time! Not to mention all the typos avoided.

If you'd like to spend less time updating FreeAgent, why not try DoubleAgent yourself?

If you subscribe to any kind of service, e.g. web hosting, you'll get an email every month with your latest receipt or invoice.

DoubleAgent can automatically upload these receipts to FreeAgent for you, saving a lot of time. This is our Receipt Emails feature.

How does DoubleAgent know which bank explanation a receipt should be attached to? Via simple rules that you set up.

Over the past few days I have made some changes so the rules are even easier to use.

  • Receipt emails can be to/from anyone @ your domain, or your verified senders. (Previously DoubleAgent only accepted emails to/from your verified senders). This lets you use plus-addressing with your receipt emails.

  • You now have the option to keep emails which don't match any of your rules. This means you can start forwarding emails to DoubleAgent before you have rules for handling them.

  • In addition to the subject, you can now specify text to match in the body of an email. This helps distinguish emails with similar, rather generic subjects ("Here is your invoice!").

  • Each rule now has a "Preview matching emails" button. This helps you fine-tune which emails your rule matches.

  • If you use GMail, when you set up forwarding, GMail sends an email requesting confirmation to the destination address. DoubleAgent now confirms these requests automatically.

  • Every time DoubleAgent receives an email, it uploads it immediately (if a rule matches). Previously emails weren't uploaded until DoubleAgent next synced with FreeAgent, which could have been up to half an hour later. This makes it much easier to see your rules working.

  • You now have a button to run all your rules immediately, saving you from having to wait for the next sync.

  • You can delete receipt emails from DoubleAgent. This is handy if you've sent any test emails into DoubleAgent.

Just over 6 months ago, in response to popular demand, DoubleAgent gained the ability to upload TransferWise statements into FreeAgent. It quickly proved a valuable feature!

Now I'm not saying that over at FreeAgent HQ they study our every move for inspiration...but a few weeks ago they switched on a bank feed from Transferwise. I'm sure it's just coincidence :)

Anyway, it's great news for people with TransferWise accounts. And since the feature is no longer needed in DoubleAgent, I removed it. It always feels good to delete 719 lines of code.

DoubleAgent now has a third way to explain Stripe payouts, and this is the most efficient way yet. What do we mean by efficient? No matter how many charges or refunds are in a payout, whether 42 or 153 or 500, you'll end up with at most 5 explanations.

So how does it work?

When you explain payouts with invoices or sales transactions, DoubleAgent looks at every charge and refund in a payout and explains each and every one with an invoice or sales transaction. If your payout comprises 300 charges, you'll get 300 invoices or sales transactions. And 300 payment explanations for the Stripe fees (and 300 for the Stripe application fees, if any).

With the new method – rolled-up sales transactions – DoubleAgent looks at all the charges and refunds in a payout and groups them into three buckets: UK customers, EU customers, and everybody else. It then creates one sales transaction for the aggregate total in each bucket with the appropriate VAT and EC status. And then a payment explanation for the aggregated Stripe fees (and one for the aggregated Stripe application fees, if any). So you end up with between 2 and 5 explanations for a payout.

When your payouts contain a lot of charges and you're only interested in the overall total, rolled-up sales transactions are the neatest way to explain them in FreeAgent.

You can read more in our Stripe reconciliation docs or just sign up and try it out yourself.

TransferWise is a popular money transfer service which many FreeAgent customers use.

FreeAgent doesn't have a bank feed for TransferWise. If you have TransferWise bank accounts set up in FreeAgent, you have to add their transactions yourself. You can either do this one transaction at a time, which is unrealistic; or you can upload a statement file.

However if you download a CSV statement from TransferWise and try to upload it to FreeAgent, you'll find that FreeAgent doesn't accept it.

But here's the good news: DoubleAgent can do it for you. Upload your TransferWise CSV statements to DoubleAgent and DoubleAgent will submit them to FreeAgent in a format which FreeAgent accepts.

As you can see from our documentation, it's a one-step process. Unless you have multiple matching bank accounts, in which case it's a two-step process :)

This is the simplest and quickest way I know of to get TransferWise statements into FreeAgent. If you're a TransferWise customer, please try it out!

DoubleAgent has been reconciling Stripe payouts for over a year – but until now all payouts were explained via invoice receipts in FreeAgent.

This is ideal if your customers need invoices, or you need to keep track of your customers inside FreeAgent, perhaps to see each one's lifetime value.

However if you are simply making sales, perhaps in a shop, and you don't need to keep track of individual customers, explaining the payouts via sales transactions would be much better.

Good news: you can now explain payouts via sales transactions! DoubleAgent creates a sales explanation in FreeAgent for each charge in Stripe, along with payment explanations for the fees.

There's also a flexible way to embed useful information in each sales explanation's description in FreeAgent, so you can see at a glance any metadata from the original charge, or the customer's email, et cetera.

If you had been holding off from explaining Stripe payouts automatically because you didn't want to use invoice receipts, now is the time to get stuck in!

You can do more with DoubleAgent's bank transaction rules now.

Matching transactions

To help you match exactly the right transactions, DoubleAgent now has a bank account filter. This allows you to restrict a rule to one particular account, or leave it running against all your accounts.

Previously your options for filtering on a transaction's amount were limited to: any amount; greater than X; less than X. Now you can also specify an exact amount to match; or an amount between two values. This is useful for distinguishing, say, expense payments to a user from salary payments.

Explanation types

You can now also explain debits as Other Money Out, with all the relevant categories. Handy for Pension Creditor payments!

Split explanations

Previously you could only split an explanation once, i.e. explain a transaction with at most two explanations. That limit is gone and now you can explain a transaction with as many explanations as you need.

DoubleAgent also allows more types of explanations to be split than previously. For example, you can split Refund explanations now.

Finally, you can now leave a transaction partly explained. Until recently the transaction rules were set up to fully explain the transactions to which they applied. Now you can choose to explain the known part of a transaction, such as a fee, and leave the remainder unexplained.

That's it for now! Most of these improvements were suggested by DoubleAgent's users, so please do get in touch with your own ideas.

DoubleAgent's Stripe and GoCardless integrations use invoices in FreeAgent to explain all your customers' Stripe charges or GoCardless payments.

If an invoice already exists for a given charge or payment, perhaps thanks to a recurring invoice, DoubleAgent will use it. But if no such invoice exists, DoubleAgent will create a suitable one.

When it comes to numbering the invoices, FreeAgent supports global invoice sequences, per-contact invoice sequences, and per-project invoice sequences.

DoubleAgent offers you another alternative: your invoices can use a custom sequence specifically for your Stripe or GoCardless integration(s). This is particularly useful when your customers are paying you for a product or service – all your invoices for that product or service can use the same invoice sequence. You can't achieve this with FreeeAgent alone.

For example, let's say you offer a product called My Super Product and your customers pay for it via Stripe or GoCardless. You can have all the invoices generated by DoubleAgent automatically number themselves MySuperProduct001, MySuperProduct002, MySuperProduct003, and so on.

Here are DoubleAgent's docs for Stripe invoice sequences and GoCardless invoice sequences. It's easy to set up.

The idea for this came from one of our customers – thank you!

DoubleAgent can integrate with Stripe and GoCardless to figure out all the charges and payments and refunds and fees in each payout and book them correctly in FreeAgent.

Each charge or payment is booked against a corresponding invoice in FreeAgent. If an invoice for a given charge or payment already exists in FreeAgent, DoubleAgent uses it. If no such invoice exists DoubleAgent creates one.

When you create an invoice in FreeAgent you can have it emailed to your contact.

Now you can also have invoices created by DoubleAgent emailed in the same way to your contact. Invoices emailed like this show the payment received – which makes them useful for automatically sending invoices as (VAT) receipts. In fact I use this for sending out automatic payment receipts for DoubleAgent itself.

Here are the docs for emailing invoices via the GoCardless integration and the Stripe integration.

Whether you are out and about and have just paid for something, or have a folder of old receipts gathering dust, DoubleAgent can get your receipts into FreeAgent for you faster than using FreeAgent itself.

It works for all four kinds of receipt situation:

  • Out-of-pocket expenses
  • Pending transactions (where it hasn't hit your bank feed yet in FreeAgent)
  • Explained transactions
  • Unexplained transactions

The process is the same in each case: upload a receipt photo, type the receipt's amount, then either click a button (for an explained transaction) or fill in a few details and then click a button (for every other kind).

It works great on a phone. It's quicker than using FreeAgent directly. And if you want to upload a receipt for a pending transaction (i.e. where you have just paid for something from your business account), you just can't do it with FreeAgent – but you can with DoubleAgent.

I upload all my receipts now through DoubleAgent. Give it a try – I hope you'll like it.

You can read all the details in the docs for receipt photos.

If you are lucky enough to receive payouts from Stripe, you will know how much time it takes to account for them in FreeAgent.

Each payout is the net result of your customers' recent charges via Stripe, fees deducted by Stripe, refunds, and so on. To explain a payout in FreeAgent you need to log into Stripe, look at the balance transactions comprising the payout, see which Stripe customer each charge or refund was from, find or create matching contacts in FreeAgent, find or create invoices for those charges or refunds, settle the invoices with the correct amounts, and book the fees as bank payments. Phew!

DoubleAgent can now do all that for you. Simply connect DoubleAgent to your Stripe account(s) and, er, that's it. DoubleAgent takes care of the rest.

You can read more about this feature in the docs.

It's easy to try out: you just need to click two buttons. If you don't like it, click another button. Simple.

If you receive payouts from GoCardless, DoubleAgent can reconcile those automatically too.

If you are lucky enough to receive payouts from GoCardless, you will know how much time it takes to account for them in FreeAgent.

Each payout is the net result of your customers' recent payments via GoCardless, fees deducted by GoCardless, and so on. To explain a payout in FreeAgent you need to log into GoCardless, look at the payments comprising the payout, see which GoCardless customer each payment was from, find or create matching contacts in FreeAgent, find or create invoices for those payments, settle the invoices with the correct amounts, and book the fees as bank payments. Phew!

DoubleAgent can now do all that for you. Simply connect DoubleAgent to your GoCardless account(s) and, er, that's it. DoubleAgent takes care of the rest.

We use this feature to automatically reconcile DoubleAgent's own customers' payments, which arrive as GoCardless payouts, in FreeAgent. It's a big timesaver.

You can read more about this feature in the docs.

It's easy to try out: you just need to click two buttons. If you don't like it, click another button. Simple.

Next will be automatic reconciliation of Stripe payouts.

When setting up rules to explain your bank transactions, you can now filter by the transaction's amount – if you want to.

For example, let's say you have an employee called Joe Bloggs.

You could have one rule to match his salary payments as debits with Joe Bloggs in the description, which are greater than, say, £500.

And you could have another rule to match his expenses reimbursements as debits with Joe Bloggs in the description, which are less than, say, £500.

If the amount isn't relevant to your rule, just leave it as the default: any amount.

Hope this helps!

DoubleAgent now supports FreeAgent's Universal accounts. Overall, then, DoubleAgent supports all these types of FreeAgent accounts:

  • UK Limited Company
  • UK Limited Liability Partnership
  • UK Partnership
  • UK Sole Trader
  • Universal

Now that DoubleAgent has explained over 5,000 bank transactions automatically, it's time to introduce the next time-saving feature: uploading receipt emails to FreeAgent.

We all regularly get invoices or receipts by email, e.g. for web hosting or subscription software. DoubleAgent can now upload the attached receipt PDFs directly to the appropriate bank transaction explanation in FreeAgent. And if the email doesn't have a PDF, DoubleAgent will convert the email itself to a PDF and upload that.

The result is all your regular receipts are in FreeAgent, attached to the right transactions.

Then at year end when your accountant asks you to dig out the receipt for a specific month's web hosting, you've got it right there in FreeAgent – that's a time-saver there and then.

And should HMRC ever spring a surprise audit, which it seems they increasingly wont to do, you have all your recurring receipts and invoices filed correctly. Which is definitely what you want.

For over a year now, I have been explaining my bank transactions in FreeAgent with a single keystroke (which runs some code I wrote). Instead of clicking around in FreeAgent categorising the same payments the exact same way month after month, the code does it all for me.

This has saved me huge amounts of time. It is especially satisfying when you have fallen behind and accumulated hundreds of unexplained transactions – in just a few seconds you are up to date again.

The obvious improvement at this stage was to change things so my explanations would stay up to date without even having to press a key. That meant moving the code from my laptop to a server. And if I was going to do that, I might as well put it on the web so other people could benefit too.

DoubleAgent is the result. I want it to be simple, lovable, and complete – and I think it is.

Its first feature is rules to explain your bank transactions automatically. I have others up my sleeve but bank transactions are first. Give it a try and let me know how you get on!