Business Automation
Why Does Your Automation Create Duplicate Records?
A request appears twice in the CRM, two tasks reach the team, or a customer receives repeated follow-up. Before adding another automation, define what counts as one operation and how the workflow should behave when the same notification arrives again.

Section 01
A repeated notification is not necessarily new work
A webhook is a notification one system sends to another when something happens. Stripe documents that the same event can arrive more than once. Receiving it again should not automatically create another business record.
Start with a concrete question: if a service request is delivered twice, should the business see one request or two? Agree on the intended result before choosing a tool. Designing repeated attempts to preserve that intended result is the purpose of idempotency.
Do not diagnose every similar record as a retry. A customer may submit two legitimate requests. Your rules must distinguish repeated delivery of one request from a separate request by the same person.
Section 02
Give the operation a stable identity
Record the source system and account, the original event identifier and the business request it refers to. GitHub, for example, documents that a requested webhook redelivery retains its original X-GitHub-Delivery identifier. Check the actual provider's behavior instead of assuming every platform uses the same fields.
We recommend defining identity at two levels: the incoming notification and the business action it requests. An event identifier alone may not express whether a second notification concerns an already-created request. Decide which event types create a record and which update an existing one.
An email address alone is a poor request identifier: one person can need more than one job. Missing or contradictory identifiers should enter a review path instead of being silently treated as a new request.
Section 03
Make the rule hold when two attempts overlap
Ask the developer how the workflow prevents two simultaneous attempts from both creating the same record. A separate 'look for a match, then create' sequence can leave a gap between those operations. The uniqueness decision needs protection at the storage or destination system.
PostgreSQL documents uniqueness constraints over a column or a combination of columns. Required identifiers matter too: its default treatment of NULL can allow repeated rows despite a uniqueness constraint. This is one implementation option, not a requirement to replace your existing database.
A unique local record does not by itself prevent a second email or a duplicate task in another platform. Review each external action separately.
Section 04
Track completion, not just receipt
Our suggested operating states are received, in progress, completed and needs review. Define what each state means and who can resolve a stalled operation. Merely accepting a notification is not evidence that the CRM update or downstream task succeeded.
Before retrying an action whose outcome is uncertain, check the destination for evidence that it already happened. Where the destination supports idempotency keys, verify their scope, retention and reuse rules. Do not assume that one key guarantees every later step. Stop for review if the outcome cannot be confirmed.
Keep a useful audit trail: operation identifier, attempt time, destination reference and outcome. Limit customer information in logs, assign access and agree how long evidence is needed for recovery. These are project decisions, not a universal retention period.
Section 05
Test delayed updates as well as duplicates
Stripe also documents that event delivery order is not guaranteed. Treat this as a reason to check ordering rules for every integration you plan to use.
Write a test where an older status update arrives after a newer one. Decide which source establishes the current state and how an uncertain conflict reaches a person. Avoid allowing arrival time alone to overwrite a confirmed business status.
Section 06
Use a small acceptance checklist
Here is a hypothetical test, not a measured customer result: send five notifications in the order E41, E41, E42, E42, E41. Suppose E41 and E42 each represent a different new service request. The expected result is two requests and three repeated deliveries handled without creating extra requests.
Then extend the test beyond that easy sequence:
- Deliver the same notification simultaneously through two workers.
- Interrupt processing after the destination acts but before local completion is recorded.
- Submit two genuine requests from the same customer; preserve both.
- Deliver a delayed status update and confirm the agreed ordering rule.
- Remove the required identifier; confirm that the exception is visible.
- Verify the sender before acting, using the provider's documented verification method.
- Check that a reviewer can investigate and resume an uncertain operation safely.
Section 07
Bring one problematic workflow to the review
CARRAS offers business automation, system integration and custom software services. Bring the tools involved, a sanitized example of the repeated record and the result your team expects. The first useful deliverable is an agreed identity, retry and recovery plan for that workflow.
Compatibility depends on the existing APIs, permissions and destination behavior. A bounded pilot should demonstrate the agreed tests before expansion. This checklist does not claim that a particular Carras integration has already passed them.