Reports

Put what you spent against what it produced, for any date range.

Get the money-vs-outcomes report

get https://api.emailchaser.com/r/reports/outcomes
Works with a read-only key

Puts spend against results for a window (since/until compare inclusively; both optional). Spend has two parts. (1) Settled credit debits from the workspace ledger, grouped by reason; in-flight reservations are excluded until they settle, credits used while Emailchaser had made the workspace's credits free are not spend and are excluded, and credits are valued at the current list price of one credit, the same per-credit price a top-up is quoted at before volume discounts, regardless of what was actually paid for them via bulk discounts or plan allowances. (2) Done-for-you order costs from each order's stored cost breakdown; orders are counted by creation time, and failed or canceled orders are excluded because their charges are unwound. Subscription (platform) fees are NOT included: the backend stores only the current subscription state, not per-window invoice history, so they cannot be attributed to a window honestly. Outcomes are sent emails, replied leads, positively-replied (interested) leads and leads marked meeting-booked in the window. costPerReply, costPerPositive and costPerMeeting divide total spend by each outcome count and are null when that count is zero. The optional campaignId narrows the OUTCOME side only - credit and order spend is workspace-level and cannot be attributed to one campaign - so per-campaign cost figures are partial attribution, not a true campaign cost.

  • since string in query

    Window start, RFC3339 or YYYY-MM-DD (inclusive)

  • until string in query

    Window end, RFC3339 or YYYY-MM-DD (inclusive; a bare date means midnight UTC at the start of that day)

  • campaignId integer in query

    Narrow the outcome side to one campaign (partial attribution; spend stays workspace-level)

Fields in the 200 response
  • campaignId integer

    CampaignID echoes the campaign filter when one was given. Only the outcome side is narrowed by it; spend stays workspace-level.

    Example: 12
  • costPerMeeting number

    CostPerMeeting is total spend divided by meetings, null when there are none.

    Example: 11.48
  • costPerPositive number

    CostPerPositive is total spend divided by positive replies, null when there are none.

    Example: 4.59
  • costPerReply number

    CostPerReply is total spend divided by replies, null when there are none.

    Example: 1.91
  • 4 fields inside outcomes
    • meetings integer

      Meetings counts leads marked as having booked a meeting in the window.

      Example: 2
    • positiveReplies integer

      PositiveReplies counts leads whose reply was categorized as interested.

      Example: 5
    • replies integer
      Example: 12
    • sent integer
      Example: 400
  • since string

    Since echoes the window start, or null when the window is open-ended.

    Example: 2026-07-01T00:00:00Z
  • 6 fields inside spend
    • credits integer

      Credits is the total of settled credit debits in the window. In-flight reservations are excluded until they settle.

      Example: 120
    • creditsByReason array of OutcomesReportCreditReason
    • creditsUsd number

      CreditsUsd values the spent credits at the list price per credit.

      Example: 3.96
    • dfyOrders integer

      DfyOrders is how many done-for-you orders were placed in the window (failed and canceled orders are excluded).

      Example: 1
    • dfyOrdersUsd number
      Example: 18.99
    • totalUsd number
      Example: 22.95
  • until string

    Until echoes the window end, or null when the window is open-ended.

    Example: 2026-07-31T00:00:00Z

Request

curl -X GET "https://api.emailchaser.com/r/reports/outcomes" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "campaignId": 12,
  "costPerMeeting": 11.48,
  "costPerPositive": 4.59,
  "costPerReply": 1.91,
  "outcomes": {
    "meetings": 2,
    "positiveReplies": 5,
    "replies": 12,
    "sent": 400
  },
  "since": "2026-07-01T00:00:00Z",
  "spend": {
    "credits": 120,
    "creditsByReason": [
      {
        "credits": 120,
        "reason": "prospect_reveal"
      }
    ],
    "creditsUsd": 3.96,
    "dfyOrders": 1,
    "dfyOrdersUsd": 18.99,
    "totalUsd": 22.95
  },
  "until": "2026-07-31T00:00:00Z"
}

Generated from the Emailchaser API's own OpenAPI definition, so it always matches the running API.