Stripe Audit Trail in QuickBooks: What Backs Each Record

A synced QuickBooks record carries ids and amounts, not documents. What backs each Stripe transaction, which Stripe links expire, and where to file the...

Acodei Content Team · 9/23/2026 · 13 min read

Eighteen months after a sale, someone opens your QuickBooks file and asks the question every review eventually reaches: what is behind this number? On a file fed from Stripe, the honest answer is split across two systems. QuickBooks has the record. Stripe has the documents. And the links that seem to connect them have an expiry date most people never notice.

This post is about what a synced QuickBooks record actually carries as evidence, what it does not, which Stripe links go dead and when, and a short routine that leaves you with an audit trail you can hand over without a scramble.

Start a free trial and see what each Stripe transaction looks like once it lands in QuickBooks.

What a reviewer actually asks for

The IRS frames it simply. "Purchases, sales, payroll, and other transactions you have in your business will generate supporting documents," and those documents "include sales slips, paid bills, invoices, receipts, deposit slips, and canceled checks." The reason to keep them is stated just as plainly: "they support the entries in your books and on your tax return."

Two more lines from the IRS guidance on what records to keep matter for anyone running books through software. "All requirements that apply to hard copy books and records also apply to electronic records." A synced file is not exempt from needing support. And on retention, the IRS rule of thumb is that you keep "records that support an item of income, deduction or credit shown on your tax return until the period of limitations for that tax return runs out": generally three years, six if you left out income worth more than 25 percent of the gross income on the return, and longer in the cases the IRS lists.

So the question for a Stripe business is concrete. For a given sale, refund or payout in QuickBooks, can you produce the document that supports it, three or more years later, without relying on something that has quietly expired?

What the synced record already carries

A synced QuickBooks record is not bare. It carries identifiers and amounts that let you trace it back to Stripe, and knowing exactly which ones saves a lot of guessing.

On a sales receipt, Acodei's documentation says the PrivateNote records the original charge amount and the Stripe fee. That matters because the receipt itself may be netted: by default the fee posts as a negative line so the receipt matches what actually entered your Stripe balance. The note is where the gross figure survives.

The document number depends on one setting. With Duplicate Protection on, the QuickBooks DocNumber is set to the Acodei transaction id, so a re-sent webhook collides with the existing record instead of creating a second one. With Duplicate Protection off, DocNumber is left empty. If you plan to use the DocNumber as your join key back to the sync, check that setting first. Our post on what Duplicate Protection actually checks covers the rest of that mechanism.

On an invoice, Acodei creates the QuickBooks Invoice when the Stripe invoice is finalized, stores the Stripe id against the QuickBooks invoice id, and applies suffix rules to avoid duplicate numbers. The Invoice Number Suffix setting, on by default, appends -AC1, -AC2 and so on. If a reviewer is holding a Stripe invoice PDF and looking for its twin in QuickBooks, the suffix is why the numbers are close but not identical. How Stripe invoice numbering maps to QuickBooks walks through the three numbers involved.

Outside QuickBooks, the Acodei Data Feed is the sync's own ledger: every synced, pending and errored transaction, with its status and error message. It answers a different question from the QuickBooks audit log. The audit log tells you what a person did to a record after it landed. The Data Feed tells you what the sync did and whether it worked. Reading Data Feed statuses explains each one.

One structural point changes everything below. On a real-time account, each successful Stripe charge becomes its own itemized QuickBooks sales record. On a daily-summary account, there is no per-charge record at all: charges are aggregated into one receipt per day. If your file runs on daily summary, there is no individual transaction to hang an individual customer's receipt on, and your evidence plan has to account for that. Daily summary vs real-time sync compares the two.

What it does not carry: the documents themselves

Here is the gap. Every item above is data: amounts, ids, numbers, notes. None of it is the supporting document the IRS describes.

Acodei's product documentation describes the fields it writes to each QuickBooks record. It does not describe attaching files to them, and we are not going to tell you it does. Plan as if the Stripe receipt, the invoice PDF and any dispute evidence stay in Stripe until you move them somewhere yourself.

That is not a problem as long as Stripe keeps them retrievable, and for the documents themselves it does. The trap is the links.

The instinct on a busy close is to paste a Stripe link into the QuickBooks memo and move on. It feels like evidence. For receipts and invoices, it is evidence with a short shelf life.

Receipt links expire after 30 days. Stripe's receipts documentation is exact about the distinction: "Receipts don't expire, but for security reasons, links to receipts expire after 30 days." The receipt_url on the Charge object is that link. Paste it into a memo in March and it is dead by April. When someone follows an expired receipt link, "Stripe asks the customer to provide the email address associated with the original transaction" and sends a fresh link to that address. That recovery path is built for your customer, not for your auditor.

Invoice links expire too, on a different clock. Stripe's hosted invoice page documentation states that "Invoice URLs expire 30 days after the due date. If the invoice doesn't have a due date, the invoice expires 30 days after it finalizes. In all cases, the expiration window is never longer than 120 days." Stripe adds one reassurance: "Even after expiration, any URLs that the Dashboard displays or a user retrieves through the API are guaranteed to be valid for at least 10 days." So a fresh link is always one Dashboard visit away. A stored link is not.

The invoice PDF link has one more wrinkle. Expired invoice links normally redirect to a recovery page, but "PDF download URLs are an exception." When a script rather than a browser requests an expired PDF URL, Stripe returns "a 400 error with a URL expired body response." If you ever automate the archiving of invoice PDFs, request the invoice again for a current URL rather than replaying an old one.

The practical rule falls out cleanly. Store the document, or store the id, never the link. A charge id (ch_), an invoice id (in_) or an invoice number lets you retrieve the current document from Stripe at any time. A stored URL gives you somewhere between 30 and 120 days.

A finalized invoice is already a snapshot

Stripe invoices have one property that makes them unusually good evidence, and it is worth knowing when a reviewer asks whether a customer's details were changed after the fact.

The customer fields on an invoice freeze at finalization. Stripe's Invoice object reference says of customer_name, customer_email and customer_address that until the invoice is finalized the field "will equal" the customer's current value, and "Once the invoice is finalized, this field will no longer be updated." Rename the customer next year and the finalized invoice still shows the name it was issued under.

The date works the same way when you override it. effective_at is "the date when this invoice is in effect," and "When defined, this value replaces the system-generated 'Date of issue' printed on the invoice PDF and receipt." If your team backdates invoices for any reason, the PDF shows the effective date, and that is the date a reviewer will compare against QuickBooks.

Both properties point the same way: the finalized Stripe invoice is the version to keep, not whatever the customer record says today.

Disputes: the one document you cannot rebuild

Receipts and invoices can be regenerated from Stripe years later. Dispute evidence is different, because what matters is exactly what you submitted, and Stripe gives you one shot at it.

Stripe's dispute response documentation is blunt: "You've only one opportunity to submit your response. Stripe immediately forwards your response and all supporting files to the issuing bank. You can't edit the response or submit additional files." The constraints on that packet are tight: "You can only submit one file per type of evidence," so several documents of one type get combined into "a single, multi-page file"; the combined maximum is 4.5 MB; and Mastercard evidence is capped at 19 pages. The window to respond is "usually 7 to 21 days, depending on the card network."

That combined file is the best record you will ever have of why a disputed sale was legitimate. Save a copy of exactly what you uploaded, on the day you upload it. The chargeback itself shows up in your books through the normal dispute flow; our Stripe chargeback accounting post covers that side, and the Stripe dispute evidence entry covers the evidence fields.

How QuickBooks attachments work

QuickBooks Online has a proper home for these files. Intuit's attachments article lists where they can go: "Bills, Checks, Credit Card, Credit Memo, Customers, Delayed Charge, Estimates, Expenses, Invoices, Receive Payments, Refund Receipt, Sales Receipt, Vendors, Vendor Credit."

Four details from that article shape how you use it on a Stripe file:

  • Accepted file types are PDF, JPEG, PNG, DOC, XLSX, CSV, TIFF, GIF and XML. Stripe receipt and invoice PDFs qualify as they are.
  • Attachments cannot go on list items. Intuit: "Attachments can't be attached directly to list items, such as Accounts or Employee Names." You cannot pin a document to your Stripe holding account itself.
  • File names cannot contain special characters. Stripe ids contain underscores, so keep the file name plain and put the id somewhere else.
  • The Attachments list has notes. Under Settings, then Attachments, you can upload files directly, download them, edit file names and add notes. The note is the right place for the Stripe id.

Customer profiles accept attachments too, which turns out to be the most useful fact on the list.

Where to attach on a synced file

Put the two halves together and the answer is less obvious than "attach the receipt to the sales receipt."

On a daily-summary account, there is no per-charge record, so there is nothing per-charge to attach to. Attach a customer's documents to their customer profile, or upload them to the Attachments list with the Stripe id in the note. The daily summary itself is an aggregate and does not want a hundred receipts stapled to it.

On a real-time account, per-charge records exist, but they are not permanent in the way a hand-keyed record is. Acodei's documented recovery tool is resync, which deletes the QuickBooks side of a transaction and runs it through its sync job again, picking up any mapping or settings changes made since. For invoices, resync deletes and re-adds the invoice and its payment. Acodei's documentation describes no step that carries a hand-added attachment from the old record to the new one. So a file attached to a synced transaction is attached to a record that a legitimate fix may replace. Resync is documented as acting on the transaction, not on the customer profile or the Attachments list, which makes those the safer home for evidence you intend to keep.

This is also why Acodei's guidance is to resync from the Data Feed instead of hand-editing synced records in QuickBooks: manual edits break the linkage the sync uses for reconciliation and reversal. Evidence filed alongside the record, rather than typed into it, stays clear of that problem.

A monthly routine that holds up

None of this needs tooling. It needs a habit, run on the same rhythm as your close.

  1. Export or download the month's supporting documents from Stripe. Receipts and invoice PDFs, retrieved fresh, not from saved links.
  2. Name each file plainly and put the Stripe id in the note. Charge id for receipts, invoice number or id for invoices. That id is your join key back to both Stripe and the synced record.
  3. Attach to the customer profile or the Attachments list, not to a synced transaction you may later resync.
  4. Save every dispute packet the day you submit it, exactly as uploaded.
  5. Record your settings. Whether Duplicate Protection and Invoice Number Suffix are on determines what the DocNumber and invoice number mean, and a reviewer reading the file cold will want to know.
  6. Keep it for the IRS period that applies to you, which for most small businesses means at least three years after filing.

The result is an audit trail in three layers: the synced record in QuickBooks with its note and number, the Data Feed showing the sync's own history, and the source document filed where a rebuild cannot touch it.

Start a free trial and see which fields each Stripe transaction carries into QuickBooks.

FAQ

No. The receipt itself does not expire, but the link does. Stripe states that "links to receipts expire after 30 days." After that, Stripe asks the visitor for the email address on the original transaction and sends a new link there. For your records, keep the charge id or a downloaded PDF rather than the receipt_url.

Invoice URLs expire 30 days after the due date, or 30 days after finalization if the invoice has no due date, and the window is never longer than 120 days. A link you fetch fresh from the Dashboard or the API is guaranteed to work for at least 10 days even after that. Store the invoice id or number and fetch a current link when you need one.

Does Acodei attach Stripe receipts or invoice PDFs to QuickBooks records?

Acodei's documentation does not describe attaching files to QuickBooks records. What it documents is the data on the record: on a sales receipt, a PrivateNote with the original charge amount and Stripe fee, and a DocNumber set to the Acodei transaction id when Duplicate Protection is on. Plan to file source documents yourself.

Where should I attach Stripe documents in QuickBooks?

On a synced file, the customer profile or the Attachments list is usually the better home than the synced transaction. Daily-summary accounts have no per-charge record to attach to, and on real-time accounts a resync deletes and rebuilds the QuickBooks record. Put the Stripe id in the attachment note, since QuickBooks file names cannot contain special characters.

Can I change dispute evidence after I submit it?

No. Stripe says you have "only one opportunity to submit your response," that it forwards everything to the issuing bank immediately, and that "You can't edit the response or submit additional files." Save a copy of the exact packet you uploaded, since it is the one piece of evidence you cannot regenerate later.

How long should I keep Stripe records for tax purposes?

The IRS says to keep records that support income, deductions or credits until the period of limitations for that return runs out. That is generally three years, six if unreported income exceeds 25 percent of the gross income shown, and longer in the cases the IRS lists. Electronic records carry the same requirements as paper ones.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

How Acodei handles this in your stack

Stripe QuickBooks Integration

See how Acodei syncs Stripe payments, fees, refunds, invoices, and payouts into QuickBooks Online automatically.

Or go straight to a capability

Get more operational finance guides like this one

We will only send high-value product and finance content.