Stripe Invoice effective_at and the QuickBooks Invoice Date
Stripe's effective_at sets the date of issue on an invoice PDF without moving its billing period or payment schedule. What that means for QuickBooks dates.
It is November 3. You finished a consulting engagement on October 31, and you are only now creating the Stripe invoice for it. Your client wants the invoice dated October 31, because that is when the work was delivered and that is the month their purchase order belongs to. You want it dated October 31 too, because on an accrual basis the revenue and the receivable belong in October. Stripe, left alone, will print November 3.
Stripe has a field for exactly this: effective_at. It changes the date of issue on the invoice PDF without changing anything else about how Stripe treats the invoice. That second half is the part people miss, and it is why the date your customer sees, the dates Stripe reports on, and the date your QuickBooks invoice carries can end up three different things.
Keep the QuickBooks invoice on the date your customer sees. With Invoice Sync on, Acodei creates each QuickBooks invoice from the finalized Stripe invoice, and an admin option can date it on Stripe's
effective_at. Start a free trial.
This post covers what effective_at is, what it changes and what it leaves alone, how it sits next to the other dates on a Stripe invoice, and what to check before you rely on it for a month-end close.
What effective_at is
Stripe's Invoice object reference defines it in two sentences:
"The date when this invoice is in effect. Same as
finalized_atunless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the invoice PDF and receipt."
Three facts are packed in there.
It has a default. If you never touch it, effective_at equals finalized_at, the moment the invoice moved from draft to open. So on most Stripe accounts, every invoice already has an effective_at, and it is simply the finalization time.
You can overwrite it. Both Create an invoice and Update an invoice accept effective_at as an optional timestamp. Whatever you pass becomes the invoice's date of issue.
Its documented effect is on the document. Stripe describes one consequence: the value replaces the "Date of issue" printed on the invoice PDF and the receipt. Stripe does not describe it as moving the billing period, the due date, when payment is attempted, or when the invoice is finalized. Treat it as the date the invoice says it was issued, and nothing more.
Set it on the draft
Stripe's update documentation is explicit about what locks at finalization: "Draft invoices are fully editable. Once an invoice is finalized, you can no longer change most of its details, including monetary values and collection_method." The invoice status guide says the same about amounts and the customer.
effective_at is not named in either list, so the documentation does not settle whether every finalized invoice will accept a new value. The practical rule is simpler than the question: set effective_at while the invoice is a draft. That is when every other detail is still open, it is before the PDF goes to the customer, and it is before anything downstream has read the finalized invoice.
For one-off invoices you create through the API, that means passing effective_at in the create call, or updating the draft before you finalize it. For subscription renewals charged automatically, Stripe creates a draft and finalizes it after the finalization grace period, 1 hour by default. If something in your stack sets effective_at on those, it has to act inside that window.
The dates on one Stripe invoice
A finalized Stripe invoice carries more dates than most people expect. They answer different questions, and effective_at only replaces one of them.
| Field | What Stripe says it is | Changed by effective_at? |
|---|---|---|
created | "Time at which the object was created" | No |
status_transitions.finalized_at | When the draft became open | No |
effective_at | "The date when this invoice is in effect" | It is the field |
due_date | "The date on which payment for this invoice is due", null for invoices charged automatically | Not documented as changed |
period_start / period_end | The earliest and latest timestamps "at which invoice items can be associated with this invoice" | Not documented as changed |
Line item period | The service period for each price | Not documented as changed |
Two of these trip people up.
due_date is often empty. Stripe's reference says it "will be null for invoices where collection_method=charge_automatically". Most subscription billing charges a saved card automatically, so most subscription invoices have no due date at all. due_date is only meaningful on invoices you send and wait to be paid.
period_start and period_end are not the service period. Stripe is explicit that they bound which invoice items can attach to the invoice, and it points you to the line item period for "the service period for each price". A renewal invoice can carry an invoice-level period that looks nothing like the month you are billing for.
The upshot: effective_at is the date of issue, the line item periods are the service dates, and due_date is the payment deadline when there is one. None of them is "the accounting date" by default. Your QuickBooks setup decides which one plays that role.
When a different date of issue is the right call
Overwriting the date of issue is legitimate in a handful of situations, and it is worth being clear about which, because a backdated invoice is also exactly what an auditor will ask about.
Billing late for work already delivered. The opening example. The work finished in October, the invoice is prepared in November, and the invoice should say October.
Migrating invoices from another system. If you are moving open invoices into Stripe from an older billing tool, you usually want each one to keep its original issue date, so the customer's records and yours still match.
Reissuing an invoice. If you void an invoice and issue a corrected one, you may want the replacement to carry the original date. Stripe's invoice status guide is the reference for the void, and the audit trail post covers what the old document leaves behind.
Not a substitute for backdating a subscription. If what you actually want is to start a subscription in the past and bill for the time already elapsed, that is a different Stripe feature, backdate_start_date, with its own rules on prorations and line counts. It is covered in backdating a Stripe subscription. effective_at only changes what the invoice says about its own issue date.
One caution applies to all of these. A date of issue in the past does not make the invoice older in any other sense. If the invoice is charged automatically, Stripe still attempts payment on its normal schedule after finalization. If it is sent for payment, the due date still comes from the due date you set or the days-until-due on the invoice. Changing the printed date changes the printed date.
Credit notes have one too
Credit notes carry the same field with a different default. Stripe's credit note reference says effective_at on a credit note is "The date when this credit note is in effect. Same as created unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF."
So if you backdate an invoice and later credit part of it, the credit note does not inherit the invoice's date. It is dated when it is created unless you overwrite it too. That is usually right (the credit happened when it happened), but it is worth knowing before a customer asks why their October invoice has a November credit against it.
What happens in QuickBooks
QuickBooks does not care what a Stripe PDF says. A QuickBooks invoice has its own invoice date, and on an accrual basis that date is what decides which month the revenue and the receivable land in. So the question for a bookkeeper is not what effective_at is, but which Stripe date your integration writes into the QuickBooks invoice date.
With Acodei, the answer is a configuration choice. Here is what our documentation says.
- When the QuickBooks invoice is created. With Invoice Sync on, Acodei creates a QuickBooks invoice when the Stripe invoice is finalized, reproducing every line item and the tax lines as your mapping settings allow.
- An effective_at option. "Use
effective_atas Invoice Date" is an admin option that dates the QuickBooks invoice on Stripe'seffective_atfield when it is present. It was added in August 2026 for backdated or rebilled Stripe invoices whoseeffective_atdiffers from creation, and it is resolved by the same date logic as the supply-date and due-date options. - Other date options. Separate admin options date the QuickBooks invoice on the Stripe due date, or on the Stripe supply date, and others write a date into the QuickBooks Service Date field instead: the invoice date, or the supply date. The due-date and supply-date invoice-date options are mutually exclusive, and so are the three service-date and supply-date options.
- Admin, not self-serve. These are admin-level options set on the Acodei side, not settings in your own dashboard.
Put that together with Stripe's default and you get a useful rule of thumb. If nothing in your billing setup overwrites effective_at, it equals the finalization time, so the effective_at option follows the finalization date. The option earns its keep on invoices where someone, or something, deliberately set a different date of issue. That is the case it was built for.
It also explains why the due-date option is the wrong tool for automatically charged subscriptions. Their due_date is null, so there is nothing for it to read.
Before you backdate into a month you have closed
Backdating a Stripe invoice is easy. Backdating a QuickBooks invoice into a period you have already closed is a decision, and the two should not happen by accident together.
QuickBooks lets you set a closing date to protect finished periods. A QuickBooks invoice dated on or before that date is a change to a period you have already reported on, and depending on your closing date settings QuickBooks either warns you or asks for the closing date password.
So before you set an effective_at in a closed month, decide which of these you want:
- The invoice belongs in the closed month. Then you are reopening that month, deliberately. Adjust the closing date or use the password, record the invoice, review the effect on that month's reports, and close it again.
- The invoice belongs in the open month, but should print the earlier date. Then the Stripe date of issue and the QuickBooks invoice date should differ on purpose, and your integration's date option should not be the one reading
effective_at. - You need October revenue but cannot reopen October. Record the revenue with an accrual in October as part of the close, and reverse it when the invoice books in November.
Any of these is defensible. Discovering in December that October's numbers moved is not.
A checklist for invoices with a different date of issue
- Decide what the date means. Date of issue, service date and payment deadline are three different things, and Stripe has a field for each.
- Set
effective_aton the draft. Do it before finalization, and before the PDF goes out. - Check what your integration writes. Find out which Stripe date becomes the QuickBooks invoice date for your account before relying on
effective_atto move revenue between months. - Keep the line periods honest. If the invoice bills October work, the line item periods should say October.
effective_atdoes not fix a wrong service period. - Mind the credit notes. They default to their own creation date, not the invoice's.
- Check the closing date. A backdated invoice in a closed QuickBooks period is a reopened period.
- Write down why. A note on the invoice, or in your close checklist, explaining why its issue date differs from its finalization date answers the question before anyone asks it.
Frequently asked questions
What is effective_at on a Stripe invoice?
It is the date the invoice is in effect. Stripe sets it to finalized_at by default, and you can overwrite it when you create or update the invoice. When defined, it replaces the system-generated "Date of issue" printed on the invoice PDF and receipt.
Does effective_at change when Stripe charges the customer?
Stripe does not document it as changing payment timing. An invoice charged automatically is still attempted on its normal schedule after finalization, and an invoice sent for payment is still due by its due date. effective_at changes the printed date of issue.
Can I change effective_at after the invoice is finalized?
Stripe's documentation says most details of an invoice lock at finalization and does not list effective_at either way. Set it while the invoice is still a draft, which is also before the customer receives the PDF.
What is the difference between effective_at and the invoice period?
effective_at is the date of issue. The invoice's period_start and period_end bound which invoice items can attach to it, and Stripe points to each line item's period for the actual service period. Backdating the date of issue does not change either.
Do Stripe credit notes use the invoice's effective_at?
No. A credit note has its own effective_at, which defaults to the credit note's creation date unless you overwrite it.
What date does the QuickBooks invoice get?
That depends on your integration's settings. With Acodei's Invoice Sync, the QuickBooks invoice is created when the Stripe invoice is finalized, and admin options control whether its invoice date follows Stripe's effective_at, the due date or the supply date.
Should I use effective_at to move revenue into the previous month?
Only if the invoice really belongs in that month and that month is still open, or you are prepared to reopen it. Otherwise, keep the invoice in the current month and record an accrual for the earlier one as part of the close.
The short version
effective_at is Stripe's date of issue: equal to the finalization time unless you overwrite it, printed on the PDF and receipt when you do, and best set while the invoice is a draft. It leaves the billing period, the line item service periods and the payment schedule alone. In QuickBooks, what matters is which Stripe date your integration writes into the invoice date. Acodei has an admin option to use effective_at for that, alongside due-date and supply-date options, and it matters most for invoices whose date of issue was deliberately set. Before you backdate into a closed month, decide whether you are reopening it.
Get the QuickBooks invoice date you actually meant. Acodei syncs Stripe sales, payments, refunds and payouts into QuickBooks Online, and with Invoice Sync on it creates each QuickBooks invoice from the finalized Stripe invoice. Start a free trial.
Automate your Stripe to QuickBooks sync
Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.
14-day free trial · card required · cancel anytime
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
Advanced Product Mapping
Map Stripe products to QuickBooks with rule-based logic on product ID, price ID, metadata, and account. Set rule priority and extend mapping to refunds and fees.
Automated Invoice Sync
Bring Stripe invoices into QuickBooks and auto-apply payments and credit memos, with invoice numbering suffixes and quantity tracking to cut double-entry.
Multi-Currency Mastery
Sync Stripe transactions across currencies with automatic exchange rate handling and currency-specific customer records. Our team enables multicurrency on request, and zero-decimal currencies such as JPY are not supported.
Class Mapping
Map Stripe products to QuickBooks classes for scalable categorization and multi-entity reporting. Class tracking requires QuickBooks Online Plus or Advanced.
Historical Data Import
Backfill historical Stripe data into QuickBooks by month range. Preview volume and cost before syncing so reporting starts from a complete baseline.
How to Connect Stripe to QuickBooks Online
Connect Stripe to QuickBooks Online in minutes. Acodei links both accounts with secure OAuth and syncs payments, fees, refunds, and payouts automatically.
Reconcile Stripe Payments in QuickBooks
Reconcile Stripe in QuickBooks Online automatically. Acodei splits out fees, matches payouts to deposits, and keeps every charge audit-ready.
Get more operational finance guides like this one
We will only send high-value product and finance content.