Skip to content
Developer API · bring your own network keys

Every affiliate catalog, aggregated and refined.

Connect your affiliate network accounts once, then query every product through one normalized API, with every price timestamped.

Works with Awin, CJ, Impact and Rakuten accounts you already have.

GET/v1/offers?gtin=9780141036144&sort=price_asc
curl -G https://api.aggrefine.dev/v1/offers \
  -d gtin=9780141036144 -d sort=price_asc \
  -H "Authorization: Bearer $AGGREFINE_KEY"
200 OK · normalized response
{
  "gtin": "9780141036144",
  "offers": [
    {
      "title": "Nineteen Eighty-Four",
      "brand": "Penguin",
      "price": { "amount": 8.49, "currency": "GBP" },
      "price_as_of": "2026-09-30T09:12:41Z",
      "availability": "in_stock",
      "merchant": "Example Books",
      "source": { "network": "awin", "connection_id": "conn_7Hq2" },
      "raw": { … original feed row … }
    },
    { "merchant": "Sample Store", "price": { "amount": 9.99, … } }
  ]
}

The problem

Every network sends the same book differently.

Different field names, number formats, identifiers and stock flags. Aggrefine maps each one into a single offer shape and keeps the original row alongside it.

Feed A · CSVsemicolon, comma decimals
ean;ProductName;search_price;currency;in_stock
9780141036144;"1984 (Modern Classics)";8,49;GBP;1
Feed B · XMLhyphenated ISBN, Y/N stock
<item sku="PEN-1984">
  <isbn>978-0-14-103614-4</isbn>
  <name>NINETEEN EIGHTY-FOUR</name>
  <salePrice curr="GBP">9.99</salePrice><stock>Y</stock>
</item>
Feed C · JSONprice as string, local date
{"EAN13":"9780141036144","Title":"Nineteen eighty four",
 "Price":"£8.75","Availability":"available",
 "LastUpdated":"30/09/2026"}

Illustrative formats — not actual network schemas.

Aggrefine · one offer shape
{
  "gtin": "9780141036144",
  "title": "Nineteen Eighty-Four",
  "brand": "Penguin",
  "price": { "amount": 8.49, "currency": "GBP" },
  "price_as_of": "2026-09-30T09:12:41Z",
  "availability": "in_stock",
  "merchant": "Example Books",
  "source": { "network": "awin", … },
  "raw": { "ean": "9780141036144", … }
}

How it works

Three steps to one catalog.

  1. Connect your networks

    Add the API credentials from your own Awin, CJ, Impact or Rakuten accounts. Each becomes a connection with its own ID.

  2. Sync and normalize

    We pull the catalogs from programs you have joined, map fields to one schema and stamp every price with when we saw it.

  3. Query one API

    Search by EAN or ISBN, compare offers, generate tracked links and subscribe to change events — the same way for every network.

What you get

One API, every network

Stop writing a connector per network. One auth scheme, one pagination model, one error format.

Clean, consistent data

Normalized GTINs, prices, currencies and availability — with the original feed row kept in raw.

Your accounts, your links

You connect your own credentials. Tracked links use your publisher IDs, so commissions and reporting stay yours.

Fresh by design

Every price carries a price_as_of timestamp. Need it newer? Request a live refresh.

Isolated and compliant

Your data is never shared with other customers. Per-network retention rules and automatic purge when you leave a program.

The API

Four calls cover most sites.

GET/v1/offers?gtin=9780141036144&sort=price_asc

Every offer for one identifier across your connections, cheapest first.

{
  "data": [
    { "merchant": "Example Books", "price": { "amount": 8.49, "currency": "GBP" },
      "price_as_of": "2026-09-30T09:12:41Z", "availability": "in_stock",
      "source": { "network": "awin", "connection_id": "conn_7Hq2" } },
    { "merchant": "Sample Store", "price": { "amount": 9.99, "currency": "GBP" },
      "price_as_of": "2026-09-29T22:05:10Z", "availability": "limited",
      "source": { "network": "cj", "connection_id": "conn_2Lx8" } }
  ],
  "next_cursor": null
}

Trust

Your data stays yours.

We handle catalogs you are licensed to use, under your accounts. Here is exactly how.

Security and data handling
  • Strict per-customer isolation

    Each customer's synced data is stored and queried separately. Nothing from your connections is visible to anyone else.

  • Retention and automatic purge

    Retention follows each network's rules. Leave a program or disconnect a network and the related data is purged automatically.

  • Credentials never in our database

    Network credentials are kept out of our application database entirely. [Storage mechanism: TBD for Security page]

Supported networks

Aggrefine is independent and is not affiliated with or endorsed by these networks. You need your own approved account with each.

Simple pricing

Compare plans →

Starter

£TBD /month

One site, one network connection.

Growth

Most sites

£TBD /month

All networks, webhooks, live refresh.

Agency

£TBD /month

Multiple sites and client accounts.

Placeholder tiers — prices and limits to be confirmed.

Make your first request in minutes.

Create a key, connect one network account, call /v1/offers.