# Processor Payout Exception Report (`h_murdock/processor-payout-exceptions`) Actor

Find signed transaction-to-payout variances and unresolved explicit bank links across processor CSV or JSON exports. Exact decimal arithmetic, scoped IDs, coverage-aware evidence and downloadable JSON, CSV and HTML.

- **URL**: https://apify.com/h\_murdock/processor-payout-exceptions.md
- **Developed by:** [Gilad Ronen](https://apify.com/h_murdock) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / completed report

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Processor Payout Exception Report do?

**Turn exported processor transactions, declared payout batches and explicitly linked bank credits into a traceable exception report.** Run it at each payout review or period close to check signed gross/fee/net arithmetic, itemized payout totals and the bank allocations you supply. It works through the Apify API or Console with CSV or normalized JSON. It does not connect to a processor or bank, guess matches, move money or produce accounting journals.

The useful boundary is a handoff across existing exports and spreadsheets. [Stripe already provides automatic-payout reconciliation reports](https://docs.stripe.com/reports/payout-reconciliation), and connected accounting tools may already meet your needs. This report is for reviewing exported evidence without adding account credentials. Mathematical agreement here means agreement of your supplied records, not proof that an export is authentic or that a bank received funds.

### How to create a payout exception report

1. Export minimized transaction itemization, declared payout batches and bank credits. Use account aliases rather than bank account numbers or personal information.
2. Give every row an exact `processor`, `account`, uppercase `currency` and literal ID. Specify the currency's minor-unit scale, for example `{"USD":2,"JPY":0}`. Keep all amounts as major-unit decimal strings and preserve refund/adjustment signs.
3. Provide each input table as **`{"rows":[...]}`** for JSON or **`{"csv":"header\ndata","mapping":{...},"defaults":{...}}`** for CSV. The input tab contains a synthetic multi-processor CSV example. Reuse saved mappings in an Apify Task for subsequent periods.
4. Declare transaction coverage by payout **expected-arrival dates** and bank coverage by **posting dates**. Mark a scope complete only when its relevant exported records are included. Set a fixed `asOf` UTC timestamp and your calendar-day arrival-review threshold.
5. Supply `depositLinks` using exact payout/deposit IDs and the same context. Download the full JSON, all-evidence CSV, review-queue CSV or standalone HTML and review unresolved rows.

An unrelated credit with an equal amount or nearby date remains unlinked. The Actor never matches it automatically. When one deposit covers multiple payouts, each link must specify a signed `allocation`, and all allocations must conserve the complete deposit amount. An invalid split quarantines every link to that deposit.

### Input and CSV mapping

Total JSON input is limited to **2 MB** and **10,000 combined table rows**; split larger periods or accounts into separate runs. IDs remain strings, including leading zeros, and are case sensitive. Dates use `YYYY-MM-DD`; `asOf` uses `YYYY-MM-DDTHH:mm:ss.sssZ`. Amounts permit a minus sign, at most 18 integral digits and no more fractional digits than your declared scale, which must be 0–4. Exponents, separators, numeric JSON amounts and ambiguous date formats are rejected.

| Table | Required normalized fields | Optional fields |
| --- | --- | --- |
| `transactions` | processor, account, currency, id, category, gross, fee, net | payoutId, date |
| `payouts` | processor, account, currency, id, amount, status, expectedArrivalDate | mode: automatic, manual or instant |
| `deposits` | processor, account, currency, id, amount, postingDate | reference |
| `depositLinks` | processor, account, currency, payoutId, depositId | allocation |

Payout status is `paid`, `pending`, `failed` or `canceled`. CSV column names default to normalized field names. A mapping goes from normalized field to exact CSV column: `{"id":"balance_transaction_id","payoutId":"automatic_payout_id","category":"reporting_category"}`. Defaults supply fields absent from the CSV, for example `{"processor":"stripe","account":"merchant-alias","currency":"USD"}`. A field cannot have both a mapping and a default. CSV supports UTF-8 BOMs, quotes, quoted commas/newlines and explicit comma, semicolon or tab delimiters. Empty optional cells are omitted. Duplicate, blank or padded headers and irregular rows are rejected. Extra CSV columns are ignored; remove unrelated personal columns before uploading. Unknown normalized JSON fields are rejected.

#### Stripe itemization recipe

Export the itemized payout reconciliation report, including `balance_transaction_id`, `automatic_payout_id`, `reporting_category`, `gross`, `fee`, `net` and `currency`. Map the first three fields as above; map the monetary fields directly and provide processor/account defaults. Set `transactionCoverage` to the expected-arrival range used for the report, not the original charge creation range. Supply a separate payout table with exact payout IDs, signed amount, explicit status and expected-arrival date. This recipe is a mapping guide, not an authenticated integration or complete fee/accounting analysis. Preserve signed amounts exactly; no currency conversion or automatic sign inversion occurs. Manual/instant activity without explicit payout IDs stays unresolved.

#### Shopify export recipe

[Shopify's documented payout CSV](https://help.shopify.com/en/manual/payments/shopify-payments/payouts/view-details) includes amounts, fees, net, type and payout timing/status information, but does not establish a stable payout ID or currency for this join. Supply your explicit processor/account/currency context and a stable caller-owned transaction ID. Map `gross` to `Amount`, `fee` to `Fee`, `net` to `Net` and `category` to `Type` when those are your actual headers. For a file you have independently assigned to one exact payout, supply a `payoutId` default. For mixed payouts, add an explicit payout-ID column before uploading. **Do not use payout date as an authenticated payout identity.** Without an explicit ID, records remain unassigned. A payout-table status must be normalized to the supported values; the Actor does not reinterpret provider status names or localized decimal/date formats.

### Output and interpreting uncertainty

One dataset item contains the complete `summary`, declared `scope` and flat `rows`. The Console has overview and evidence views. You can download the dataset in formats such as JSON, CSV or Excel; the separately prepared KVS exports contain the complete nested report or flat evidence.

| Evidence field | Meaning |
| --- | --- |
| `kind`, `processor`, `account`, `currency`, relevant IDs | Scoped transaction, payout, deposit or link identity |
| `status`, `transactionStatus`, `bankStatus` | Agreement, review, unknown, pending/failed or bank not checked |
| `expected`, `observed`, `residual` | Exact decimal arithmetic; residual is observed minus expected |
| `transactionGross`, `transactionFee`, `transactionNet` | Eligible signed itemization totals on payout rows |
| `linkedAmount`, `bankResidual` | Usable explicit allocation total and linked-minus-payout residual |
| `issues`, `sourceRefs` | Reason codes with severity and source table/row pointers |

Identical repeated IDs are counted once and flagged as duplicate exports. Conflicting IDs are quarantined, with all source rows retained. A malformed gross-minus-fee calculation is excluded from payout sums and makes that payout itemization unknown. Complete supplied itemization with a differing total produces a variance; incomplete coverage cannot produce a clean agreement. Manual/instant payout itemization remains unknown when unassigned activity exists in the same context.

Omitting `deposits` means bank `not_checked`; `{"rows":[]}` is an explicitly empty bank export. Pending/failed payouts are distinct from absent bank evidence. A paid payout beyond your caller-defined delay without an explicit link yields a review item only when complete bank coverage includes expected arrival through `asOf`. This is **not a missing-money conclusion**. Delay uses UTC calendar days, excludes the exact threshold day and applies no weekend/holiday calendar. Future and out-of-window evidence remain unresolved. The coverage declaration cannot be independently verified by this Actor.

Full JSON must be below 8 MB and every generated export below 9 MB. High-conflict input can expand beyond these limits and be rejected before a report event. CSV formulas are neutralized with an apostrophe, including negative-looking amount cells; use the JSON for machine arithmetic. HTML escapes content and uses no external scripts or resources. Download the HTML attachment and open it locally.

### Price and repeated use

The launch price is **$0.50 per completed report**, with platform usage included and no separate startup or dataset-item fee. A separate new run is billable again, even for the same input. Same-run resurrection checks input fingerprint and complete saved-report integrity, restores convenience exports and retains one dataset item and one report charge. If delivery is interrupted before the event charge, some uncharged convenience files can remain; recovery verifies or regenerates the report. Deleting or modifying a charged dataset blocks recovery. Billing and dataset writes are separate operations; ambiguous persisted states fail closed.

Schedule an Apify Task or call the API for each new exported period. Saved mappings reduce repeated setup, but you must still supply authorized current evidence and honest coverage. Check the Store pricing tab for the active price before running.

### Data handling, limits and support

This is a cloud report, so uploaded data and exports are stored in your Apify run's storage under the platform's retention and sharing settings. Use authorized minimized records and pseudonymous account keys, remove names, emails, bank/card numbers and unrelated columns, and review your own access/retention settings. The Actor does not log customer rows. It makes no external data/model requests and needs no processor/bank token.

It provides operational arithmetic evidence, not financial/tax advice, a fraud allegation, fee-policy assessment, source authentication, FX conversion, a clearing-account balance, a GL journal or payment execution. Native processor reports and existing accounting tools remain appropriate when they already cover your workflow. Use the Issues tab to report a reproducible mapping or calculation problem with synthetic minimized data; the API tab provides integration examples.

# Actor input Schema

## `asOf` (type: `string`):

Reference time YYYY-MM-DDTHH:mm:ss.sssZ. All date-only comparisons use UTC calendar days. No runtime wall-clock guessing.

## `currencyScales` (type: `object`):

Exact uppercase three-letter currency keys with integer scales 0–4, e.g. {"USD":2,"JPY":0}. Every context requires a caller-declared scale. Amounts are major-unit decimal strings, never exponent form.

## `transactions` (type: `object`):

Rows: processor, account, currency, id, optional payoutId, category, gross, fee, net, optional date YYYY-MM-DD. Signs preserved. Unassigned activity stays unresolved. Supply exactly {"rows":\[normalized JSON rows]} OR {"csv":"CSV header and data","mapping":{"normalizedField":"CSV column"},"defaults":{"processor":"alias","account":"alias","currency":"USD"},"delimiter":","}. mapping/defaults optional; delimiter comma, semicolon or tab. Combined <=10000 rows and total input <=2 MB. CSV dates and values must already use documented formats; unknown mapping fields, duplicate headers and irregular rows fail.

## `payouts` (type: `object`):

Rows: processor, account, currency, id, amount, status paid|pending|failed|canceled, expectedArrivalDate YYYY-MM-DD, optional mode automatic|manual|instant. Supply exactly {"rows":\[normalized JSON rows]} OR {"csv":"CSV header and data","mapping":{"normalizedField":"CSV column"},"defaults":{"processor":"alias","account":"alias","currency":"USD"},"delimiter":","}. mapping/defaults optional; delimiter comma, semicolon or tab. Combined <=10000 rows and total input <=2 MB. CSV dates and values must already use documented formats; unknown mapping fields, duplicate headers and irregular rows fail.

## `deposits` (type: `object`):

Optional. Omit to skip bank checking; {"rows":\[]} declares an empty bank export. Rows: processor, account, currency, id, amount, postingDate YYYY-MM-DD, optional reference. Supply exactly {"rows":\[normalized JSON rows]} OR {"csv":"CSV header and data","mapping":{"normalizedField":"CSV column"},"defaults":{"processor":"alias","account":"alias","currency":"USD"},"delimiter":","}. mapping/defaults optional; delimiter comma, semicolon or tab. Combined <=10000 rows and total input <=2 MB. CSV dates and values must already use documented formats; unknown mapping fields, duplicate headers and irregular rows fail.

## `depositLinks` (type: `object`):

Optional explicit bank links. Rows: processor, account, currency, payoutId, depositId, optional allocation. Splitting one deposit across payouts requires explicit signed allocations conserving the entire deposit. No amount/date matching. Supply exactly {"rows":\[normalized JSON rows]} OR {"csv":"CSV header and data","mapping":{"normalizedField":"CSV column"},"defaults":{"processor":"alias","account":"alias","currency":"USD"},"delimiter":","}. mapping/defaults optional; delimiter comma, semicolon or tab. Combined <=10000 rows and total input <=2 MB. CSV dates and values must already use documented formats; unknown mapping fields, duplicate headers and irregular rows fail.

## `transactionCoverage` (type: `array`):

Required by runtime; supply \[] if coverage is unknown. One window per exact processor/account/currency: startDate/endDate YYYY-MM-DD and complete boolean. Covers payout EXPECTED ARRIVAL dates, not charge creation dates. Mark complete only when all itemization for those payout batches is included. Absent/partial/out-of-window scope stays unknown.

## `bankCoverage` (type: `array`):

One posting-date window per exact processor/account/currency: startDate/endDate YYYY-MM-DD and complete boolean. Omit if no bank input; empty coverage is unknown. Absent-link due review requires coverage from expected arrival through asOf. Coverage cannot extend beyond asOf.

## `daysAfterExpectedArrivalForReview` (type: `integer`):

Review only when asOf date is strictly more than this number of calendar days after expected arrival. No weekends, holidays, legal deadlines or source-authentication assumptions.

## Actor input object example

```json
{
  "asOf": "2026-10-01T12:00:00.000Z",
  "currencyScales": {
    "USD": 2,
    "EUR": 2
  },
  "transactions": {
    "csv": "processor,account,currency,id,payoutId,category,gross,fee,net,date\nstripe,merchant-001,USD,txn-001,po-001,charge,100.00,3.00,97.00,2026-09-20\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\nshopify,store-002,USD,00003,payout-002,charge,50.00,2.00,48.00,2026-09-22\npaypal,seller-003,EUR,adj-004,payout-003,charge,20.00,2.00,18.00,2026-09-22\n"
  },
  "payouts": {
    "csv": "processor,account,currency,id,amount,status,expectedArrivalDate,mode\nstripe,merchant-001,USD,po-001,87.00,paid,2026-09-25,automatic\nshopify,store-002,USD,payout-002,45.00,paid,2026-09-25,automatic\npaypal,seller-003,EUR,payout-003,18.00,paid,2026-09-26,automatic\n"
  },
  "deposits": {
    "csv": "processor,account,currency,id,amount,postingDate,reference\nstripe,merchant-001,USD,bank-001,87.00,2026-09-25,explicit-reference-001\nstripe,merchant-001,USD,unrelated-same-amount,87.00,2026-09-25,other-payment\nshopify,store-002,USD,bank-002,45.00,2026-09-25,explicit-reference-002\npaypal,seller-003,EUR,bank-003,18.00,2026-09-26,unlinked-credit\n"
  },
  "depositLinks": {
    "csv": "processor,account,currency,payoutId,depositId,allocation\nstripe,merchant-001,USD,po-001,bank-001,\nshopify,store-002,USD,payout-002,bank-002,\n"
  },
  "transactionCoverage": [
    {
      "processor": "stripe",
      "account": "merchant-001",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "shopify",
      "account": "store-002",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "paypal",
      "account": "seller-003",
      "currency": "EUR",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    }
  ],
  "bankCoverage": [
    {
      "processor": "stripe",
      "account": "merchant-001",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "shopify",
      "account": "store-002",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "paypal",
      "account": "seller-003",
      "currency": "EUR",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": false
    }
  ],
  "daysAfterExpectedArrivalForReview": 3
}
```

# Actor output Schema

## `dataset` (type: `string`):

One item containing summary, scope and flat rows.

## `json` (type: `string`):

No description

## `evidence` (type: `string`):

No description

## `findings` (type: `string`):

No description

## `html` (type: `string`):

Escaped standalone report, download and open locally.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "asOf": "2026-10-01T12:00:00.000Z",
    "currencyScales": {
        "USD": 2,
        "EUR": 2
    },
    "transactions": {
        "csv": "processor,account,currency,id,payoutId,category,gross,fee,net,date\nstripe,merchant-001,USD,txn-001,po-001,charge,100.00,3.00,97.00,2026-09-20\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\nshopify,store-002,USD,00003,payout-002,charge,50.00,2.00,48.00,2026-09-22\npaypal,seller-003,EUR,adj-004,payout-003,charge,20.00,2.00,18.00,2026-09-22\n"
    },
    "payouts": {
        "csv": "processor,account,currency,id,amount,status,expectedArrivalDate,mode\nstripe,merchant-001,USD,po-001,87.00,paid,2026-09-25,automatic\nshopify,store-002,USD,payout-002,45.00,paid,2026-09-25,automatic\npaypal,seller-003,EUR,payout-003,18.00,paid,2026-09-26,automatic\n"
    },
    "deposits": {
        "csv": "processor,account,currency,id,amount,postingDate,reference\nstripe,merchant-001,USD,bank-001,87.00,2026-09-25,explicit-reference-001\nstripe,merchant-001,USD,unrelated-same-amount,87.00,2026-09-25,other-payment\nshopify,store-002,USD,bank-002,45.00,2026-09-25,explicit-reference-002\npaypal,seller-003,EUR,bank-003,18.00,2026-09-26,unlinked-credit\n"
    },
    "depositLinks": {
        "csv": "processor,account,currency,payoutId,depositId,allocation\nstripe,merchant-001,USD,po-001,bank-001,\nshopify,store-002,USD,payout-002,bank-002,\n"
    },
    "transactionCoverage": [
        {
            "processor": "stripe",
            "account": "merchant-001",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": true
        },
        {
            "processor": "shopify",
            "account": "store-002",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": true
        },
        {
            "processor": "paypal",
            "account": "seller-003",
            "currency": "EUR",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": true
        }
    ],
    "bankCoverage": [
        {
            "processor": "stripe",
            "account": "merchant-001",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": true
        },
        {
            "processor": "shopify",
            "account": "store-002",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": true
        },
        {
            "processor": "paypal",
            "account": "seller-003",
            "currency": "EUR",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": false
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("h_murdock/processor-payout-exceptions").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "asOf": "2026-10-01T12:00:00.000Z",
    "currencyScales": {
        "USD": 2,
        "EUR": 2,
    },
    "transactions": { "csv": """processor,account,currency,id,payoutId,category,gross,fee,net,date
stripe,merchant-001,USD,txn-001,po-001,charge,100.00,3.00,97.00,2026-09-20
stripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21
stripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21
shopify,store-002,USD,00003,payout-002,charge,50.00,2.00,48.00,2026-09-22
paypal,seller-003,EUR,adj-004,payout-003,charge,20.00,2.00,18.00,2026-09-22
""" },
    "payouts": { "csv": """processor,account,currency,id,amount,status,expectedArrivalDate,mode
stripe,merchant-001,USD,po-001,87.00,paid,2026-09-25,automatic
shopify,store-002,USD,payout-002,45.00,paid,2026-09-25,automatic
paypal,seller-003,EUR,payout-003,18.00,paid,2026-09-26,automatic
""" },
    "deposits": { "csv": """processor,account,currency,id,amount,postingDate,reference
stripe,merchant-001,USD,bank-001,87.00,2026-09-25,explicit-reference-001
stripe,merchant-001,USD,unrelated-same-amount,87.00,2026-09-25,other-payment
shopify,store-002,USD,bank-002,45.00,2026-09-25,explicit-reference-002
paypal,seller-003,EUR,bank-003,18.00,2026-09-26,unlinked-credit
""" },
    "depositLinks": { "csv": """processor,account,currency,payoutId,depositId,allocation
stripe,merchant-001,USD,po-001,bank-001,
shopify,store-002,USD,payout-002,bank-002,
""" },
    "transactionCoverage": [
        {
            "processor": "stripe",
            "account": "merchant-001",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": True,
        },
        {
            "processor": "shopify",
            "account": "store-002",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": True,
        },
        {
            "processor": "paypal",
            "account": "seller-003",
            "currency": "EUR",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": True,
        },
    ],
    "bankCoverage": [
        {
            "processor": "stripe",
            "account": "merchant-001",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": True,
        },
        {
            "processor": "shopify",
            "account": "store-002",
            "currency": "USD",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": True,
        },
        {
            "processor": "paypal",
            "account": "seller-003",
            "currency": "EUR",
            "startDate": "2026-09-01",
            "endDate": "2026-10-01",
            "complete": False,
        },
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("h_murdock/processor-payout-exceptions").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "asOf": "2026-10-01T12:00:00.000Z",
  "currencyScales": {
    "USD": 2,
    "EUR": 2
  },
  "transactions": {
    "csv": "processor,account,currency,id,payoutId,category,gross,fee,net,date\\nstripe,merchant-001,USD,txn-001,po-001,charge,100.00,3.00,97.00,2026-09-20\\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\\nstripe,merchant-001,USD,txn-002,po-001,refund,-10.00,0.00,-10.00,2026-09-21\\nshopify,store-002,USD,00003,payout-002,charge,50.00,2.00,48.00,2026-09-22\\npaypal,seller-003,EUR,adj-004,payout-003,charge,20.00,2.00,18.00,2026-09-22\\n"
  },
  "payouts": {
    "csv": "processor,account,currency,id,amount,status,expectedArrivalDate,mode\\nstripe,merchant-001,USD,po-001,87.00,paid,2026-09-25,automatic\\nshopify,store-002,USD,payout-002,45.00,paid,2026-09-25,automatic\\npaypal,seller-003,EUR,payout-003,18.00,paid,2026-09-26,automatic\\n"
  },
  "deposits": {
    "csv": "processor,account,currency,id,amount,postingDate,reference\\nstripe,merchant-001,USD,bank-001,87.00,2026-09-25,explicit-reference-001\\nstripe,merchant-001,USD,unrelated-same-amount,87.00,2026-09-25,other-payment\\nshopify,store-002,USD,bank-002,45.00,2026-09-25,explicit-reference-002\\npaypal,seller-003,EUR,bank-003,18.00,2026-09-26,unlinked-credit\\n"
  },
  "depositLinks": {
    "csv": "processor,account,currency,payoutId,depositId,allocation\\nstripe,merchant-001,USD,po-001,bank-001,\\nshopify,store-002,USD,payout-002,bank-002,\\n"
  },
  "transactionCoverage": [
    {
      "processor": "stripe",
      "account": "merchant-001",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "shopify",
      "account": "store-002",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "paypal",
      "account": "seller-003",
      "currency": "EUR",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    }
  ],
  "bankCoverage": [
    {
      "processor": "stripe",
      "account": "merchant-001",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "shopify",
      "account": "store-002",
      "currency": "USD",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": true
    },
    {
      "processor": "paypal",
      "account": "seller-003",
      "currency": "EUR",
      "startDate": "2026-09-01",
      "endDate": "2026-10-01",
      "complete": false
    }
  ]
}' |
apify call h_murdock/processor-payout-exceptions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,h_murdock/processor-payout-exceptions"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/88CuP9vXlYu2vdAm5/builds/MhjyliJN3tlpEGWUc/openapi.json
