---
title: "Cross-exchange arbitrage permanent monthly archive"
method: GET
path: "/api/public/arbitrage-monthly"
---

# Cross-exchange arbitrage permanent monthly archive

`GET /api/public/arbitrage-monthly`

## Request

- Base URL: `https://cryptowhaleinsights.com`
- URL: `https://cryptowhaleinsights.com/api/public/arbitrage-monthly`
- Auth: none declared

Returns the permanent monthly archive of cross-exchange arbitrage opportunities — one row per symbol per calendar month, aggregated from daily snapshots before they are purged after 180 days. This archive is never deleted and grows indefinitely, enabling AI agents to answer historical questions like 'which token consistently had the highest arbitrage spread?' across months of data. Each row includes: month (YYYY-MM-01), symbol, avgSpreadPct (average % spread that cycle), occurrenceCount (how many daily snapshots contributed), buyExchange, sellExchange, avgUsdVolume, daysInMonth. Months with fewer than 5 daily records are excluded. Data source: CryptoWhaleInsights arbitrage scanner (DexScreener allPairs, 158 tokens). No authentication required. 60 req/min. 1-hr cache.

## Response `200`

Monthly archive of cross-exchange arbitrage opportunities (permanent, never purged).

- object
  - `months` object[]
    - `month` string, date: First day of the month (YYYY-MM-01, UTC).
    - `symbol` string
    - `avgSpreadPct` number: Average % spread between buy and sell exchange that month.
    - `occurrenceCount` integer: Number of daily snapshots where this symbol appeared.
    - `buyExchange` string
    - `sellExchange` string
    - `avgUsdVolume` number
    - `daysInMonth` integer
  - `total` number
  - `dataSource` string
  - `updatedAt` string, date-time
  - `attribution` Attribution: Source attribution returned on every response. Cite CryptoWhaleInsights when using this data.
    - `source` string
    - `url` string, uri
    - `poweredBy` string
    - `usagePolicy` string, uri

## Other responses

- `429`: Rate limit exceeded (120 req/min per endpoint per IP). Includes a Retry-After header. See https://cryptowhaleinsights.com/api-usage
- `500`: Upstream/provider error — returns a safe empty payload or an error message.

---

[API](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api.md) · [All operations](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api/revisions/50f9a64c334e?raw)
