# Amazon FBA Reimbursement Scanner (`proficientstack/fba-reembolso-scanner`) Actor

Audita dados de relatorios Amazon FBA e devolve as reclamacoes de reembolso reclamaveis, com janela de prazo e valor estimado. Deduplica o que a Amazon ja pagou.

- **URL**: https://apify.com/proficientstack/fba-reembolso-scanner.md
- **Developed by:** [Gabriel Barreto](https://apify.com/proficientstack) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Amazon FBA Reimbursement Scanner

Amazon loses and damages inventory inside its own warehouses, and it does reimburse you for it — but only if you file a claim, and only inside a filing window. Most sellers never file, because the evidence is spread across four separate reports that nobody reads line by line.

Paste those reports in. Get back **the claims you can still file**, each with the units, the estimated value, the days left before the window closes, and the evidence to paste into the case.

The reconciliation approach behind this was raised publicly on Amazon's own SDK tracker — [`amzn/selling-partner-api-models` issue #5353](https://github.com/amzn/selling-partner-api-models/issues/5353) — and acknowledged there.

### What it detects

| Rule | Category | How it is proven |
|---|---|---|
| A | Inventory lost or damaged in the warehouse, never reimbursed | Adjustment rows with a Lost/Damaged reason and no matching reimbursement |
| B | Customer return never returned to sellable stock | Return recorded, no corresponding inventory movement back in |
| C | Removal order that never arrived | Removal shipped, not received, past the expected window |

Every claim carries the rows it came from. You are never asked to trust the tool — you are shown what to paste into the Amazon case.

### What it will not do

- **It never claims twice.** Anything already covered in `GET_FBA_REIMBURSEMENTS_DATA` is matched and excluded. Filing a duplicate claim is the fastest way to lose credibility with Seller Support.
- **It does not invent values.** Amazon reimburses your unit **cost**, not your selling price. Without a `costMap` or a `defaultUnitCost` the claims are still correct, but the estimated value comes out as `0` — and the Actor says so loudly in the log rather than showing you a column of zeros and letting you conclude it is broken. Zero is not the same as unknown.
- **It does not need your Amazon credentials.** You paste report rows. Nothing connects to your seller account from here.

### Input

Export these from Seller Central (Reports → Fulfilment) and paste the rows as JSON objects:

| Field | Report |
|---|---|
| `adjustments` | `GET_FBA_FULFILLMENT_INVENTORY_ADJUSTMENTS_DATA` |
| `reimbursements` | `GET_FBA_REIMBURSEMENTS_DATA` |
| `returns` | `GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA` |
| `removals` | `GET_FBA_FULFILLMENT_REMOVAL_ORDER_DETAIL_DATA` |
| `costMap` | Your unit cost per SKU, e.g. `{"MY-SKU": 9.12}` |

The default input is a small worked example so you can see the shape of the output before pasting your own data.

### Output

One row per claimable reimbursement:

| Field | Meaning |
|---|---|
| `rule` / `category` | Which rule fired and what kind of loss it is |
| `sku` / `fnsku` / `quantity` | What was lost and how many units |
| `estValue` / `currency` | Units times your unit cost |
| `daysLeft` | Days remaining before the filing window closes. This is the field that decides your order of work. |
| `evidence` | The source rows, ready to paste into the case |

### The deadlines are short now

Amazon shortened the filing windows on **23 October 2024**, and the change is easy to miss because most guides still quote the old numbers:

| Claim type | Window |
|---|---|
| Lost or damaged in a fulfilment centre | **60 days** (it used to be 18 months) |
| Customer return not restocked | 60 to 120 days |
| Removal lost in transit | 15 to 75 days |

This is the single most important thing the scanner gets right. A tool still using the old 18-month window will tell you a claim is fine when the window closed a year ago. Since **1 November 2024** Amazon also auto-reimburses many lost-in-FC cases, so very recent events are marked *wait* rather than *claim now* — but only briefly, because waiting 45 days inside a 60-day window leaves almost no time to act.

### A deadline worth knowing

Amazon is retiring the settlement report format on **11 November 2026**. Reconciliation that depends on it will stop working on that date. This Actor works from the fulfilment reports, which are not affected.

### Pricing

Pay per claim found. If the scan finds nothing claimable, you are not charged for findings that do not exist.

# Actor input Schema

## `adjustments` (type: `array`):

Rows from GET\_FBA\_FULFILLMENT\_INVENTORY\_ADJUSTMENTS\_DATA, as objects of column -> value. This is the report that shows units Amazon lost or damaged inside the warehouse.

## `reimbursements` (type: `array`):

Rows from GET\_FBA\_REIMBURSEMENTS\_DATA. Used to avoid claiming twice for something Amazon already paid.

## `returns` (type: `array`):

Rows from GET\_FBA\_FULFILLMENT\_CUSTOMER\_RETURNS\_DATA.

## `removals` (type: `array`):

Rows from GET\_FBA\_FULFILLMENT\_REMOVAL\_ORDER\_DETAIL\_DATA.

## `costMap` (type: `object`):

For example {"MY-SKU": 9.12}. Amazon reimburses your unit COST, not your selling price, so without this the claims are still correct but their value shows as 0.

## `defaultUnitCost` (type: `integer`):

Used when a SKU is not in the cost map.

## `currency` (type: `string`):

EUR, GBP, USD...

## Actor input object example

```json
{
  "adjustments": [
    {
      "adjusted-date": "2026-07-02",
      "sku": "DEMO-SKU-1",
      "fnsku": "X001DEMO1",
      "reason": "M",
      "disposition": "WAREHOUSE_DAMAGED",
      "fulfillment-center-id": "MAD4",
      "quantity": "-3"
    },
    {
      "adjusted-date": "2026-08-14",
      "sku": "DEMO-SKU-2",
      "fnsku": "X001DEMO2",
      "reason": "E",
      "disposition": "LOST",
      "fulfillment-center-id": "BCN1",
      "quantity": "-2"
    }
  ],
  "costMap": {
    "DEMO-SKU-1": 9.12,
    "DEMO-SKU-2": 14.5
  },
  "currency": "EUR"
}
```

# Actor output Schema

## `claims` (type: `string`):

One row per claim you can still file: rule, SKU, units, estimated value, days left before the window closes, and the evidence to paste into the case.

# 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 = {
    "adjustments": [
        {
            "adjusted-date": "2026-07-02",
            "sku": "DEMO-SKU-1",
            "fnsku": "X001DEMO1",
            "reason": "M",
            "disposition": "WAREHOUSE_DAMAGED",
            "fulfillment-center-id": "MAD4",
            "quantity": "-3"
        },
        {
            "adjusted-date": "2026-08-14",
            "sku": "DEMO-SKU-2",
            "fnsku": "X001DEMO2",
            "reason": "E",
            "disposition": "LOST",
            "fulfillment-center-id": "BCN1",
            "quantity": "-2"
        }
    ],
    "costMap": {
        "DEMO-SKU-1": 9.12,
        "DEMO-SKU-2": 14.5
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("proficientstack/fba-reembolso-scanner").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 = {
    "adjustments": [
        {
            "adjusted-date": "2026-07-02",
            "sku": "DEMO-SKU-1",
            "fnsku": "X001DEMO1",
            "reason": "M",
            "disposition": "WAREHOUSE_DAMAGED",
            "fulfillment-center-id": "MAD4",
            "quantity": "-3",
        },
        {
            "adjusted-date": "2026-08-14",
            "sku": "DEMO-SKU-2",
            "fnsku": "X001DEMO2",
            "reason": "E",
            "disposition": "LOST",
            "fulfillment-center-id": "BCN1",
            "quantity": "-2",
        },
    ],
    "costMap": {
        "DEMO-SKU-1": 9.12,
        "DEMO-SKU-2": 14.5,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("proficientstack/fba-reembolso-scanner").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 '{
  "adjustments": [
    {
      "adjusted-date": "2026-07-02",
      "sku": "DEMO-SKU-1",
      "fnsku": "X001DEMO1",
      "reason": "M",
      "disposition": "WAREHOUSE_DAMAGED",
      "fulfillment-center-id": "MAD4",
      "quantity": "-3"
    },
    {
      "adjusted-date": "2026-08-14",
      "sku": "DEMO-SKU-2",
      "fnsku": "X001DEMO2",
      "reason": "E",
      "disposition": "LOST",
      "fulfillment-center-id": "BCN1",
      "quantity": "-2"
    }
  ],
  "costMap": {
    "DEMO-SKU-1": 9.12,
    "DEMO-SKU-2": 14.5
  }
}' |
apify call proficientstack/fba-reembolso-scanner --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,proficientstack/fba-reembolso-scanner"
        }
    }
}
```

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/B7IlWoDhw5yn7WsjH/builds/Zp3Wr8NBexqb9CHtq/openapi.json
