One API, every network
Stop writing a connector per network. One auth scheme, one pagination model, one error format.
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.
curl -G https://api.aggrefine.dev/v1/offers \ -d gtin=9780141036144 -d sort=price_asc \ -H "Authorization: Bearer $AGGREFINE_KEY"
{
"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
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.
ean;ProductName;search_price;currency;in_stock 9780141036144;"1984 (Modern Classics)";8,49;GBP;1
<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>
{"EAN13":"9780141036144","Title":"Nineteen eighty four",
"Price":"£8.75","Availability":"available",
"LastUpdated":"30/09/2026"}Illustrative formats — not actual network schemas.
{
"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
Add the API credentials from your own Awin, CJ, Impact or Rakuten accounts. Each becomes a connection with its own ID.
We pull the catalogs from programs you have joined, map fields to one schema and stamp every price with when we saw it.
Search by EAN or ISBN, compare offers, generate tracked links and subscribe to change events — the same way for every network.
Stop writing a connector per network. One auth scheme, one pagination model, one error format.
Normalized GTINs, prices, currencies and availability — with the original feed row kept in raw.
You connect your own credentials. Tracked links use your publisher IDs, so commissions and reporting stay yours.
Every price carries a price_as_of timestamp. Need it newer? Request a live refresh.
Your data is never shared with other customers. Per-network retention rules and automatic purge when you leave a program.
The API
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
}One canonical product record, merged from every feed that lists it.
{
"gtin": "9780141036144",
"title": "Nineteen Eighty-Four",
"brand": "Penguin",
"identifiers": { "isbn13": "9780141036144", "isbn10": "0141036141" },
"offers_url": "/v1/offers?gtin=9780141036144",
"sources": ["awin", "cj"]
}Built with the publisher ID from your own connection. Add a sub_id for your reporting.
// request body { "offer_id": "off_3Kd9", "sub_id": "review-1984" } // response { "url": "https://track.example-network.com/…?pub=YOUR_ID&sub=review-1984", "source": { "network": "awin", "connection_id": "conn_7Hq2" } }
Signed events sent to your endpoint when offers change or a sync fails.
{
"id": "evt_01JAB3",
"type": "offer.price_changed",
"created": "2026-09-30T09:14:02Z",
"data": {
"gtin": "9780141036144", "merchant": "Example Books",
"previous_price": { "amount": 9.49, "currency": "GBP" },
"price": { "amount": 8.49, "currency": "GBP" },
"price_as_of": "2026-09-30T09:12:41Z",
"source": { "network": "awin", "connection_id": "conn_7Hq2" }
}
}
// also: offer.removed · sync.failedTrust
We handle catalogs you are licensed to use, under your accounts. Here is exactly how.
Security and data handlingEach customer's synced data is stored and queried separately. Nothing from your connections is visible to anyone else.
Retention follows each network's rules. Leave a program or disconnect a network and the related data is purged automatically.
Network credentials are kept out of our application database entirely. [Storage mechanism: TBD for Security page]
Aggrefine is independent and is not affiliated with or endorsed by these networks. You need your own approved account with each.
£TBD /month
One site, one network connection.
£TBD /month
All networks, webhooks, live refresh.
£TBD /month
Multiple sites and client accounts.
Placeholder tiers — prices and limits to be confirmed.
Create a key, connect one network account, call /v1/offers.