Automate gift card liability reconciliation, from Shopify to your ledger
Updated · By Ecomsellertool editorial team
A gift card sold is a liability, not revenue, until it is redeemed. To reconcile it each month, pull Shopify's gift card figures, roll the opening liability forward with cards sold, cards issued free, redemptions and disabled cards, and check the closing figure against both Shopify's outstanding balance and the liability account in QuickBooks Online or Xero. Rules post the movements; a person explains every gap.
- Shopify does not count a sold gift card as a sale, because it is a liability; the full item value counts as a sale when the card is redeemed (checked November 13, 2026).
- Shopify's gift card data reports the starting and ending liability, value added by cards sold, value added by cards issued, value removed by disabled cards and adjusted value for any period.
- In Shopify, a deactivated gift card cannot be reactivated, and gift card balances cannot be edited directly from the admin.
- Closing liability = opening liability + cards sold + cards issued free - redemptions - disabled value +/- adjustments.
- US federal rules bar store gift card funds from expiring within five years, with exclusions such as promotional cards; state and foreign laws differ, so your accountant or counsel decides.
The step map: who runs each step
Trigger: Month-end close, plus a daily check of new gift cards issued, disabled or adjusted in Shopify.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | At month-end the workflow pulls Shopify's gift card figures for the month: starting balance, value sold, value issued, value disabled, value adjusted and ending balance, per currency. | Rule |
| 2 | Redemptions and refunds back to gift cards are pulled from the gift card entries in Shopify's payments data, and the gift card export is pulled for card-level detail such as issue method, expiry and deactivation date. | Rule |
| 3 | The roll-forward is built: opening liability plus sold plus issued, minus redeemed and disabled, plus or minus adjustments. The computed closing figure is checked against Shopify's ending balance. | Rule |
| 4 | Each movement is mapped to the accounts your accountant approves, and one balanced journal entry per month and currency is drafted for QuickBooks Online or Xero, with the roll-forward attached. | Rule |
| 5 | The ledger's gift card liability balance is read back and compared with Shopify's ending balance. Any difference is split into known causes from the mismatch table, and what is left is marked unexplained. | Rule |
| 6 | Cards issued free, disabled cards, expired cards with a balance and manual adjustments are listed card by card for review, with who issued them and the note on the card. | Rule |
| 7 | A person reviews the flagged cards and the unexplained difference, decides the treatment with the accountant, and approves the entry. | Person |
| 8 | The approved entry is posted, the month's roll-forward is saved as next month's opening line, and the run is logged with the reports it came from. | Rule |
7 rule steps · 0 AI model steps · 1 person step. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- The account map: which accounts cards sold, cards issued free, redemptions and disabled cards post to
- How free cards issued as refunds, promotions or apologies are booked, decided with your accountant
- Expired and long-unused balances, and any unclaimed-property question, decided by your accountant or counsel
- Any difference the mismatch table cannot explain, before the month is closed
- Who may issue, disable or adjust gift cards in Shopify, and the limits for each person
Which tools can run it
- A monthly spreadsheet roll-forward fed by Shopify's gift card reports, for a low card volume
- Your accounting connector's gift card mapping, if it posts sales and redemptions to a liability account
- Zapier, Make or n8n pulling Shopify data, drafting the journal and sending it for approval
- Custom code on your accounts, for several stores, currencies or gift card sources and a card-level audit
Systems it connects
- Shopify gift cards and finance reports
- Shopify Admin API (gift cards)
- QuickBooks Online
- Xero
- Approval queue in Slack or email
Build size: Medium
The arithmetic is simple; the work is finding redemptions and free cards in the right data and agreeing their treatment once with your accountant.
Every gift card you sell is money you have taken for goods you have not shipped yet. Until the card is redeemed, that money is a debt to the cardholder, so it sits in a liability account, not in sales. The trouble starts when the liability in your ledger and the outstanding balance in Shopify drift apart: free cards issued as refunds that nobody booked, redemptions recorded as a payment without reducing the liability, cards disabled in one system and not the other. This recipe closes that gap every month. It is one page of our automation library.
How does a monthly gift card roll-forward work?
A roll-forward explains how the liability moved from the first day of the month to the last. Every movement has a source in Shopify, and the closing line has to match two numbers: Shopify's own ending balance and the gift card liability account in your ledger. You can run this table today in a spreadsheet; the workflow only fills it in and checks it.
Closing liability = opening liability + cards sold + cards issued free - redemptions - disabled value +/- adjustments
Shopify's gift card data for reports gives most lines directly, per day, month or currency: the starting and ending gift card balance, the liability added by cards sold, the liability added by cards issued, the value removed when cards are disabled, and the value adjusted (checked November 13, 2026). Redemptions are not in that data. They come from the payments side, where Shopify's finance reports record the amount paid by or refunded to a gift card as a gift card entry (checked November 13, 2026).
| Line | Where it comes from | Illustrative month |
|---|---|---|
| Opening liability | Last month's closing line (and Shopify's starting balance) | $18,400 |
| + Cards sold | Liability added by gift cards sold | $6,250 |
| + Cards issued free | Liability added by cards issued from the admin, such as refunds and promotions | $900 |
| - Redemptions | Gift card payments on orders, net of refunds back to gift cards | $5,120 |
| - Disabled value | Value removed when cards are disabled | $150 |
| +/- Adjustments | Balance changes made through an app or the API | $0 |
| = Computed closing liability | The sum of the lines above | $20,280 |
| Shopify ending balance | Outstanding gift card balance on the last day | $20,280 |
| Difference, Shopify | Computed closing minus Shopify ending | $0 |
| Ledger liability balance | Gift card liability account in QuickBooks Online or Xero | $20,130 |
| Difference, ledger | Computed closing minus ledger | $150 |
These numbers are illustrative, for a brand selling about $6,000 of gift cards a month, not a client's results. The first check ties out: Shopify's movements explain its own ending balance. The second does not. The ledger is $150 low, and the card-level review finds two causes that partly cancel: $300 of promotional cards issued free were never booked (ledger too low), and a $150 card disabled in Shopify was never released in the ledger (ledger too high). A net difference of $150 hid $450 of errors, which is why the workflow explains each cause instead of posting a plug.
What causes gift card mismatches, and who fixes each one?
When either difference line is not zero, one of these is usually the reason. The workflow checks for each cause in turn, shows the cards involved, and only marks a difference unexplained when none fit.
| Cause | How it shows up | Who fixes it |
|---|---|---|
| Free cards issued from the admin (as a refund, store credit, promotion or reward) | Shopify's issued value is above zero, with no cash behind it; the ledger is lower than Shopify | Your accountant decides the account once; then the workflow books them every month |
| Redemptions booked as a payment method, not against the liability | The ledger liability keeps growing while Shopify's balance falls | The bookkeeper fixes the connector or item mapping, then corrects past months |
| A disabled card | Shopify zeroes its balance; the ledger still holds it | A person confirms why it was disabled; the accountant decides where the release goes |
| An expired card with a balance | Shopify keeps counting it in the outstanding balance; the ledger may have released it | Your accountant or counsel, under the rules that apply to you |
| A balance changed through an app or the API | Adjusted value is not zero | Whoever owns the app or integration explains the change |
| A gift card sold at a discount | Net sales from gift cards are below the face value added to the liability | Your accountant decides how the discount is booked |
| Imported orders paid by gift card | Shopify's balance did not fall for those orders | The ops owner of the import adjusts the card balances |
| Several currencies | Totals tie in one currency and not another | The workflow reconciles each currency on its own line |
| Timing at month-end | A card disabled or a redemption late on the last day shows next month | The cut-off rule is set once; disabled values can take up to 24 hours to reach the report |
Shopify documents several of these behaviors itself. Its finance reports page says an expired card's remaining balance keeps counting toward the outstanding balance, a deactivated card's balance returns to zero, deactivated values can take up to 24 hours to show, the amount paid by gift card on imported orders is not subtracted automatically, and gift card reports and exports can have different totals because they count different things (checked November 13, 2026). It also says there is no per-transaction gift card ledger report, which is why the workflow keeps its own.
Where does the card-level detail come from?
Totals tell you that something is wrong. Card-level detail tells you which card. Shopify's gift card export includes the issue date, expiry date, initial and current balance, currency, issue method, whether the card is expired or deactivated, the deactivation date, the issuing staff member and the note (checked November 13, 2026). The same page says a deactivated card cannot be reactivated, reloaded or refunded onto, and that balances cannot be edited directly from the admin: they change only through redemption, a refund or a custom integration that uses the gift card API.
For a daily check, the GiftCard object in Shopify's Admin API returns each card's balance, initial value, whether it is enabled, its expiry and deactivation dates, its transaction history and the order that created it, which is empty for cards issued manually (checked November 13, 2026). It needs the read_gift_cards access scope only; this workflow reads gift cards and never changes them.
Shopify's page on issuing gift cards lists the reasons a staff member creates one without payment: a promotion, incentive or reward, a custom denomination, or a refund or store credit (checked November 13, 2026). Those are exactly the cards the review list shows each day, with who issued them and why, so a refund issued as a card in your returns and refunds workflow is booked the same way as the cash refund it replaced.
How do you post gift card movements in QuickBooks Online or Xero?
Post one summary entry per month and currency, not one per card. Intuit's guide to selling and redeeming gift cards in QuickBooks Online sets up a liability account and a gift certificate product linked to it; a redemption adds that product as a negative line on the customer's invoice (checked November 13, 2026). A month-end journal entry works too, and QuickBooks requires the total of its debits column to equal the total of its credits column, per its journal entry guide (checked November 13, 2026).
In Xero, the Accounting API's manual journals need a narration and lines where debits are positive and credits are negative; the Xero Accounting API specification shows the error returned when total debits do not equal total credits (checked November 13, 2026). Either way, the account behind each line is your accountant's choice. The table shows what each movement does to the liability; the other side of each entry is left to that decision.
| Movement | Effect on the gift card liability | The other side, decided by your accountant |
|---|---|---|
| Card sold | Increases it | Usually the cash or payments clearing account |
| Card issued free as a refund | Increases it | Usually where the refund would have gone |
| Card issued free as a promotion | Increases it, or is tracked separately | A choice your accountant makes |
| Redemption | Decreases it | Sales, if the order's sale is not already booked from the order data |
| Disabled or expired balance released | Decreases it | A choice your accountant makes under the rules that apply |
Check the redemption line against how your orders reach the ledger. If a connector already books each order as a sale paid partly by gift card, the redemption entry must only move the gift card portion out of the liability, or the sale is counted twice. Our marketplace payouts recipe covers the cash side of the same orders.
Which tools can run it?
Pick the smallest setup that ties out every month.
| Setup | When it fits | Trade-off |
|---|---|---|
| A monthly spreadsheet roll-forward | A few hundred cards and one store | Someone exports and reconciles by hand, but the table above is all it needs |
| Your accounting connector's gift card mapping | Your connector already posts gift card sales to a liability account | Free cards, disabled cards and expiry usually still need the monthly check |
| Zapier, Make or n8n | One store, one currency, an approval step in Slack or email | You maintain the field mapping and the log |
| Custom code on your accounts | Several stores or currencies, gift cards from POS and online, a card-level audit trail | Higher build cost; it can run on Ecomsellertool Growth OS |
What should stay with a person?
The rules find and sort; people decide. Your accountant sets the account map once, including how free cards issued as refunds and promotions are booked. Each month a person reviews the cards the workflow flags, explains or accepts any difference the mismatch table cannot, and approves the entry before the month closes. Expiry and unclaimed balances go to your accountant or counsel. A person also decides who may issue, disable or adjust cards in Shopify. Free cards and discount codes leak margin the same way, which our discount code leak alerts recipe watches on the code side.
Who builds gift card reconciliation for Shopify brands?
Ecomsellertool builds finance workflows like this one on your own Shopify and accounting accounts. We have built software on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. We start with your accountant's account map and how your cards are issued, then build the pulls, the roll-forward, the checks and the review list. Send a project brief below, or read how our workflow automation service works.
The alerting and finance data sides of this recipe are work we have shipped:
- Alerts that put a person on the right item. For AccountDr we built rule-based automation that notifies Amazon sellers about account events such as performance metrics, listing faults and stranded inventory, by push and email, so a person acts on the specific item instead of searching for it.
- An accounting firm's data pipeline. For Zonkeepers, an accounting firm, we built an AWS pipeline that ingests Amazon order and finance reports into profit and loss analytics, with sales and expenses broken out.
Get this workflow built
Send us your version of this workflow
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
Is a gift card sale revenue?
Not when it is sold. The money is received, but you still owe the customer goods, so it is usually held as a liability. It becomes revenue when the card is redeemed. Shopify reports it the same way: selling a gift card is not counted as a sale, and the redeemed item is counted as a sale later.
Why doesn't my Shopify gift card balance match QuickBooks?
The usual causes are free cards issued from the admin that were never booked, redemptions recorded as a payment method without reducing the liability, disabled cards that Shopify has zeroed but the ledger still holds, expired cards treated differently in each system, and month-end timing. A roll-forward splits the difference into those causes so you know which entry to fix.
How do I find my gift card liability in Shopify?
Use the Outstanding gift card balance report in Shopify's finance reports and read the ending gift card balance for the date you need. For movements during the month, the same gift card data shows value sold, value issued, value disabled and value adjusted. Redemptions come from the gift card entries in the payments data.
How should free gift cards from refunds or promotions be booked?
There is no single answer, and it is a decision for your accountant. A card issued instead of a cash refund is different from a promotional card given away. What matters for the workflow is that every free card is found, tagged with its reason and booked the same way each month, so the liability in the ledger matches Shopify.
What happens to the liability when a gift card expires or is disabled?
In Shopify, an expired card's remaining balance keeps counting in the outstanding balance, and a deactivated card's balance goes to zero. Whether and when your books release that value depends on the law that applies to you and your accountant's judgment. The workflow lists those cards and does not decide for you.
Can I automate gift card reconciliation without custom code?
Often, yes. At low volume a monthly spreadsheet fed by Shopify's gift card reports works. An accounting connector may already post gift card sales to a liability account. Custom code earns its cost with several stores or currencies, gift cards from more than one system, or a finance team that wants a card-level audit trail.
