Send a project brief

REPORTING TEMPLATE

Return the status and the reason behind it.

Separate call events, current lead state, closure reasons and downstream outcomes. The working template below can be mapped to a CRM, tracker or affiliate network without turning every unsuccessful call into one opaque declined bucket.

On this page12 sections
  1. 01Why one status field fails
  2. 02Separate four layers
  3. 03Use a small lifecycle vocabulary
  4. 04Keep attempt outcomes observable
  5. 05Use one primary reason for a terminal state
  6. 06Keep downstream events in a separate namespace
  7. 07Preserve source context without putting customer data in an affiliate report
  8. 08Working CSV event template
  9. 09Map operations to a network without losing detail
  10. 10Govern corrections and finalization
  11. 11Build the report from counts and denominators
  12. 12Use codes to choose the next review

Why one status field fails

Affiliate platforms commonly use commercial conversion states such as pending, approved and declined. Those values are useful for attribution and payout logic, but they do not tell an operator:

  • whether the number rang;
  • whether the intended customer was reached;
  • whether another attempt is due;
  • whether the customer denied submitting the order;
  • whether an order was confirmed and then changed;
  • whether fulfillment or a courier later reported a different event.

Keep the operating truth first. Map it to each receiving platform second.

1. Separate four layers

Table 1: Separate four layers
Layer Question Example
Event What happened at one point in time? Attempt placed, customer reached, callback requested, order confirmed
Lifecycle status Where is the lead now? Accepted, calling, callback due, confirmed, closed no order, excluded
Reason code Why did it enter this state? Customer declined price, duplicate under rule, attempt plan exhausted
Downstream status What did another responsible system report later? Fulfillment accepted, dispatched, delivered, delivered and paid

An attempt outcome is not automatically the current lead status. No answer at 10:00 can be followed by customer reached at 15:00. Preserve both events and derive the current state.

Order updated and upsell accepted are events attached to the order. They should not replace the lead's confirmed status.

2. Use a small lifecycle vocabulary

The exact labels may change by project. Their meanings must not.

Table 2: Use a small lifecycle vocabulary
Machine code Meaning Interim or terminal Required companion
received The integration received a lead record Interim Source event ID and received time
accepted The record passed contract-defined intake checks and entered the calling queue Interim Accepted-lead definition version
calling At least one permitted attempt exists and the attempt path remains open Interim Latest attempt event
callback_due The customer requested a permitted future contact time Interim Callback time/window
confirmed The customer agreed all project-required order details Terminal for the initial phone sale; later correction is possible Confirmed-order definition and final order revision
closed_no_order A qualifying conversation ended without a confirmed order Terminal unless reopened under an agreed rule One customer-decision reason
closed_unreachable The permitted attempt path ended without a qualifying human connection Terminal unless reopened under an agreed rule Attempt-plan version and final contactability reason
excluded The record did not enter or remain in the eligible calling cohort under an agreed intake rule Terminal for that intake record One exclusion reason

Do not use approved as the internal definition unless the project explicitly maps it to confirmed and records the definition version.

3. Keep attempt outcomes observable

These events describe a specific call, not a final judgment about the lead:

Table 3: Keep attempt outcomes observable
Attempt outcome Use when Do not infer
no_answer The call completed with ringing and no qualifying answer Fraud, invalid number or terminal unreachable
number_switched_off The telephony result indicates the device/number is switched off Permanent invalidity
number_unavailable The telephony result indicates the number is presently unavailable Why it is unavailable
voicemail_or_answering_machine A machine or voicemail answered Human contact
third_party_answer Someone other than the intended customer answered Customer decision
customer_reached The project-defined human-connection threshold was met Confirmation
call_ended_before_decision Contact occurred but the customer decision was not established Decline
callback_requested The customer requested another permitted contact time A completed sale

Define the qualifying human-connection threshold. A silent connection, a one-word third-party answer or voicemail must not become three different interpretations of reached across reports.

4. Use one primary reason for a terminal state

Intake exclusion reasons

Table 4: Intake exclusion reasons
Machine code Definition and evidence
duplicate_under_rule Matches the documented deduplication key and time window; retain the permitted matched-record reference
invalid_contact_data The required phone/contact field fails the project validation or is confirmed invalid
missing_required_field A named required intake field is absent
wrong_market_or_offer The submitted market or offer is outside the configured project
test_record The record is explicitly identified as a project test
contact_not_permitted The record cannot enter the agreed contact path under the client-supplied authority, suppression or project rule

Closed no-order reasons

Table 5: Closed no-order reasons
Machine code Definition and evidence
customer_declined_offer The customer understood the offer and chose not to proceed; use an approved subreason only if needed
price_not_accepted The customer declined after the final price and applicable fee were stated
product_not_wanted The customer understood the product but did not want it
customer_says_did_not_order The reached person states they did not submit the lead/order
outside_delivery_area The address is outside the downstream service area supplied for the project
required_order_detail_unavailable A project-required order field could not be established
customer_canceled_before_handoff A previously confirmed customer canceled before the configured fulfillment handoff
other_agreed_reason A temporary agreed exception pending taxonomy review; requires structured detail, not an unrestricted narrative

Customer says they did not order is an observation, not automatic proof of publisher fraud. Outside delivery area describes the current downstream coverage, not call quality.

Closed unreachable reasons

Table 6: Closed unreachable reasons
Machine code Definition and evidence
attempt_plan_no_answer All permitted attempts ended with no qualifying answer
attempt_plan_switched_off The configured attempt path ended with the number switched off
attempt_plan_unavailable The configured attempt path ended with the number unavailable
attempt_plan_voicemail The configured attempt path ended without human contact after voicemail/machine outcomes
mixed_no_contact_outcomes The path ended with more than one no-contact outcome and no more specific primary reason is accurate

The attempt-plan version is part of the evidence. A lead called once and a lead called under the complete agreed plan must not share the same terminal reason without that context.

5. Keep downstream events in a separate namespace

When the client or responsible downstream system supplies them, events may include:

Table 7: Keep downstream events in a separate namespace
Machine code Minimum meaning Owner/source
fulfillment_accepted The downstream operation accepted the order under its current rules Fulfillment/order system
dispatched The responsible system recorded a shipment handoff Fulfillment/courier
delivery_exception A downstream event requires review or a permitted customer follow-up Courier/fulfillment
delivered The responsible system recorded completed delivery Courier/fulfillment
delivered_and_paid The responsible source recorded both delivery and payment Courier/fulfillment/finance
returned The downstream source recorded a return under its defined rule Courier/fulfillment

TheCall may receive those events to review later outcomes or perform an agreed customer call. It does not create, own or guarantee physical delivery or payment.

6. Preserve source context without putting customer data in an affiliate report

Keep stable non-customer identifiers:

  • external lead ID;
  • internal lead ID;
  • offer ID;
  • market;
  • source ID;
  • publisher/affiliate ID where applicable;
  • subID or equivalent campaign slot;
  • order ID after creation;
  • event ID;
  • definition/schema version.

Platform names vary. The Awin glossary (opens in a new tab) uses advertiser, publisher, transaction and server-to-server tracking language. Everflow's identifier guidance (opens in a new tab) distinguishes click/transaction and conversion event identifiers, while its postback documentation (opens in a new tab) shows source/sub parameters in platform-specific mappings. Affise's postback documentation (opens in a new tab) requires its own click identifier and supports commercial statuses such as approved, pending, declined and hold. Map the project's fields to the platform actually in use; do not assume sub1 means the same business dimension in every system.

Affiliate reporting normally does not need the customer's name, phone, address, call audio or free-text health information. Use pseudonymous IDs and a controlled evidence route for a permitted dispute review.

7. Working CSV event template

This template is intentionally an event ledger, not a single mutable lead row.

event_id,lead_id,external_lead_id,order_id,offer_id,market,source_id,publisher_id,sub_id,event_type,lifecycle_status,attempt_outcome,reason_code,order_revision,occurred_at,recorded_at,source_system,schema_version,correction_of_event_id,detail_code

Field rules

Table 8: Field rules
Field Rule
event_id Globally unique identifier used for retry deduplication
lead_id Stable calling-operation lead identifier
external_lead_id Stable client/tracker identifier
order_id Empty until an order exists; never reuse it for another order
offer_id, market Required project-routing dimensions
source_id, publisher_id, sub_id Preserve only supplied, permitted and contract-defined attribution dimensions
event_type One observable event, such as lead_accepted, call_attempted, callback_requested, order_confirmed, order_updated or status_corrected
lifecycle_status Resulting current state under the versioned transition rules
attempt_outcome Populated only for a call-attempt event
reason_code Required when the transition needs a reason; one primary code
order_revision Increment when permitted order fields change
occurred_at Time the business event happened, including offset or UTC
recorded_at Time the source system stored the event
source_system System responsible for the event
schema_version Definition set applied to the event
correction_of_event_id Original event ID when this event corrects it
detail_code Approved structured detail only; no unrestricted sensitive narrative

Synthetic status-exchange example

event_id,lead_id,external_lead_id,order_id,offer_id,market,source_id,publisher_id,sub_id,event_type,lifecycle_status,attempt_outcome,reason_code,order_revision,occurred_at,recorded_at,source_system,schema_version,correction_of_event_id,detail_code
evt_demo_001,lead_demo_001,ext_demo_001,,offer_demo,NG,paid_social,pub_demo,creative_a,lead_accepted,accepted,,,0,2026-07-31T08:00:00Z,2026-07-31T08:00:01Z,calling_crm,1.0,,
evt_demo_002,lead_demo_001,ext_demo_001,,offer_demo,NG,paid_social,pub_demo,creative_a,call_attempted,calling,no_answer,,0,2026-07-31T08:04:00Z,2026-07-31T08:04:02Z,dialer,1.0,,
evt_demo_003,lead_demo_001,ext_demo_001,,offer_demo,NG,paid_social,pub_demo,creative_a,call_attempted,calling,customer_reached,,0,2026-07-31T11:20:00Z,2026-07-31T11:20:02Z,dialer,1.0,,
evt_demo_004,lead_demo_001,ext_demo_001,,offer_demo,NG,paid_social,pub_demo,creative_a,callback_requested,callback_due,,,0,2026-07-31T11:20:03Z,2026-07-31T11:20:04Z,calling_crm,1.0,,callback_same_day
evt_demo_005,lead_demo_001,ext_demo_001,order_demo_001,offer_demo,NG,paid_social,pub_demo,creative_a,order_confirmed,confirmed,,,1,2026-07-31T15:10:00Z,2026-07-31T15:10:04Z,calling_crm,1.0,,

Synthetic IDs and values are used only to demonstrate the schema. They are not client records, TheCall performance data or a universal production taxonomy.

8. Map operations to a network without losing detail

Write a mapping table for the actual network:

Table 9: Map operations to a network without losing detail
Operating state/event Possible external commercial state Mapping condition
received, accepted, calling, callback_due pending Only if the network uses pending before its contract-defined event
confirmed approved or an additional conversion event Only if confirmed order is the exact contracted approval event
closed_no_order, closed_unreachable, excluded declined or no commercial conversion Per contract; retain the detailed reason internally
delivered_and_paid Additional event or commercial finalization Only when supplied by the responsible source and defined in the agreement
Correction Reversal/replacement under platform rules Must reference the original event and preserve the audit trail

Do not send repeated attempts as repeated conversions. Do not reuse an event ID after changing its meaning. A retried webhook must be idempotent: the receiver recognizes the same event rather than creating a second commercial action.

9. Govern corrections and finalization

Before the first report or invoice, agree:

  1. which system owns each event;
  2. which timestamp creates the reporting cohort;
  3. how long interim states remain open;
  4. the downstream maturity window;
  5. the challenge/correction window;
  6. which evidence each role may inspect;
  7. who may correct an event;
  8. whether a correction reverses, replaces or supplements the commercial event;
  9. when the period becomes final;
  10. how later courier or payment updates are shown.

Never delete a disputed event and insert a cleaner row. Append a correction with a new event ID, actor/source, time, reason and correction_of_event_id.

10. Build the report from counts and denominators

For each market, offer, source/publisher and subID slice, show:

  • accepted leads;
  • reached leads under the stated threshold;
  • confirmed orders;
  • closed no-order records by primary reason;
  • closed unreachable records by terminal reason;
  • excluded records by intake reason;
  • provisional and mature downstream counts where supplied;
  • correction count;
  • definition/schema version.

Then calculate only named rates:

Contact rate = reached leads ÷ accepted leads
Confirmation rate = confirmed orders ÷ accepted leads
Contact-to-confirm rate = confirmed orders ÷ reached leads
Reason share = records with one reason ÷ records in that reason's parent state

Customer says they did not order should be divided by the relevant reached, no-order cohort, rather than automatically by all submitted leads. No answer attempt counts should not be compared with unique lead counts as if they were the same unit.

Read the complete denominator guide.

11. Use codes to choose the next review

Table 10: Use codes to choose the next review
Signal Review next Guardrail
customer_says_did_not_order rises for one source/subID Creative, landing-page representation, form behavior, duplicates and permitted call evidence Do not label fraud from the code alone
price_not_accepted rises across sources Ad, landing page, script, final price and fee consistency Do not hide the price to preserve confirmation
closed_unreachable rises market-wide Lead age, number format, calling windows, attempt spacing, telephony and system delay Do not exceed the permitted contact path
Confirmed orders later decline downstream Final recap, address fields, dispatch delay and downstream attempt evidence Do not assume the call center owns the courier outcome
Corrections cluster around one code Definition clarity, training, status UI and review evidence Fix the rule before blaming the setter

Next step

Apply the definitions to a real project.

Send the market, offer, lead flow and the operating decision behind your question. We will review fit and reply by email.