Avoid duplicate imports after retries: Check ledger for existing entries using source reference and amount.; Use delivery ID to detect duplicates—Shopify uses this method.; Compare item counts and batch totals to verify completeness.
Image: Accounting Tech Guide

Bank Feeds

Part of Accounting automation controls

Detecting duplicate imports after an integration retry

Trace source event IDs, retry attempts and ledger entries to find and correct duplicate accounting imports.

Before replaying an uncertain import, check whether the first attempt created a ledger entry. Compare the source transaction, delivery attempts and destination records. A missing response can leave the sender unsure even when the receiving system completed its work.

Reconstruct what happened

Collect the source system and business transaction reference, any delivery ID, amount, currency, entity, accounting date, attempt times and destination entry IDs.

Keep delivery status separate from posting status. A failed or timed-out delivery response does not, by itself, establish that nothing posted.

Search the ledger by source reference, then compare supporting fields. Matching amounts and dates are clues, not proof: genuine transactions can share them.

If the integration sends batches or aggregates items, compare the source range, item count, component totals and destination batch reference.

Compare source events with ledger entries

FindingNext action
One source transaction and one matching entryRecord the destination ID; do not replay it.
One source transaction and two candidate entriesPause retries and investigate both entries.
Source transaction present, no entry foundCheck pending and rejected states before a controlled replay.
Two distinct source transactions with similar detailsInspect the underlying records before calling either a duplicate.
Batch totals agree but item counts differInvestigate omissions, repeats and aggregation; totals alone do not prove completeness.

For example, an order export may time out and then be sent again.

Two ledger IDs associated with the same source transaction are a reason to investigate, not enough on their own to delete an entry. Confirm what each entry represents and whether either has been adjusted.

Correct and prevent a repeat

Assign a finance owner to decide which entry represents the source transaction. Retain the source record, destination references, decision and correction.

If the period is closed or tax reporting may be affected, obtain the accountant's direction on the appropriate adjustment. Recheck related clearing accounts and reconciliations after correction.

Ask the integration owner how retries are identified and whether the destination prevents a second creation. A delivery ID and a business event ID may serve different purposes.

Shopify's documentation says each delivery includes a delivery ID that can be used to detect duplicates.

The receiving process therefore needs a key suited to the accounting result it is trying to create.

Keep a source-to-destination mapping, including failed attempts and corrections, and monitor both item counts and amounts.

Key Facts from Integration Retry Best Practices

Delivery ID use case
Shopify uses delivery ID to detect duplicates (source: https://shopify.dev/docs/apps/build/webhooks/verify-deliveries)
Idempotent requests
Stripe supports idempotent requests to prevent duplicate processing (source: https://docs.stripe.com/api/idempotent\_requests)
Australian record-keeping requirement
Businesses must maintain accurate financial records under Australian law (source: https://business.gov.au/finance/payments-and-invoicing/record-keeping)

More from Bank Feeds

Bank Feeds

Accounting integrations

Plan accounting integrations around source records, posting rules and reconciliation. Check ecommerce, POS and payroll transfers before automating them.