Skip to content

GetPrice API

Look up competitor prices for your own SKUs and feed them into your ERP, BI or pricing tools. Send a SKU, and the GetPrice API returns every competitor selling that item, with each price and when GetPrice last collected it.

https://api.getprice.ai/v1v1 pilot

The API in four sentences

You send a secret key in the Authorization header. Everything is JSON over HTTPS, at https://api.getprice.ai/v1. Money is a decimal string with a currency, and times are UTC. Lists come in pages that you follow with next_cursor.

BASE=https://api.getprice.ai/v1
curl -G "$BASE/comparison-sets" \
  -H "Authorization: Bearer $GETPRICE_API_KEY" \
  --data-urlencode "sku=10072L" \
  --data-urlencode "sku=11247P"
import os

import requests

BASE = "https://api.getprice.ai/v1"
KEY = os.environ["GETPRICE_API_KEY"]

resp = requests.get(
    f"{BASE}/comparison-sets",
    params=[("sku", "10072L"), ("sku", "11247P")],
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=30,
)
resp.raise_for_status()
page = resp.json()
for entry in page["skus"]:
    print(entry["sku"], entry["status"])
for cset in page["data"]:
    for entry in cset["competitors"]:
        price = entry["price"]
        if price:
            name = entry["competitor"]["name"]
            print(cset["sku"], name, price["amount"])
interface Entry {
  competitor: { name: string };
  price: { amount: string } | null;
}
interface Page {
  data: { sku: string | null; competitors: Entry[] }[];
  skus: { sku: string; status: string }[];
}

const BASE = "https://api.getprice.ai/v1";
const KEY = process.env.GETPRICE_API_KEY;
const params = new URLSearchParams([
  ["sku", "10072L"],
  ["sku", "11247P"],
]);
const url = `${BASE}/comparison-sets?${params}`;
const res = await fetch(url, {
  headers: { Authorization: `Bearer ${KEY}` },
});
if (!res.ok) {
  throw new Error(`GetPrice returned ${res.status}`);
}
const page = (await res.json()) as Page;
for (const { sku, status } of page.skus) {
  console.log(sku, status);
}
for (const set of page.data) {
  for (const { competitor, price } of set.competitors) {
    if (!price) continue;
    console.log(set.sku, competitor.name, price.amount);
  }
}
<?php
$base = "https://api.getprice.ai/v1";
$key = getenv("GETPRICE_API_KEY");
// Repeat sku once per SKU.
$skus = ["10072L", "11247P"];
$query = implode("&", array_map(
    fn ($sku) => "sku=" . rawurlencode($sku),
    $skus,
));
$ch = curl_init("$base/comparison-sets?$query");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $key",
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($body === false || $status >= 400) {
    throw new RuntimeException(
        "GetPrice returned $status: $body"
    );
}
$data = json_decode(
    $body, true, flags: JSON_THROW_ON_ERROR
);

foreach ($data["skus"] as $entry) {
    echo $entry["sku"], " ", $entry["status"], "\n";
}
foreach ($data["data"] as $set) {
    foreach ($set["competitors"] as $entry) {
        if ($entry["price"] === null) {
            continue;
        }
        echo $set["sku"], " ",
            $entry["competitor"]["name"], " ",
            $entry["price"]["amount"], "\n";
    }
}
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;
using Naming = System.Text.Json.JsonNamingPolicy;

var key = Environment.GetEnvironmentVariable(
    "GETPRICE_API_KEY");
var api = new Uri("https://api.getprice.ai/v1/");
var http = new HttpClient { BaseAddress = api };
http.Timeout = TimeSpan.FromSeconds(30);
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", key);
var json = new JsonSerializerOptions
{
    PropertyNamingPolicy = Naming.SnakeCaseLower,
};

var res = await http.GetAsync(
    "comparison-sets?sku=10072L&sku=11247P");
res.EnsureSuccessStatusCode();
var page = await res.Content
    .ReadFromJsonAsync<Page>(json);
foreach (var s in page!.Skus)
    Console.WriteLine($"{s.Sku} {s.Status}");
foreach (var set in page.Data)
    foreach (var e in set.Competitors)
        if (e.Price is { } price)
            Console.WriteLine(
                $"{set.Sku} {e.Competitor.Name} "
                + price.Amount);

record Page(List<CompSet> Data, List<SkuStatus> Skus);
record SkuStatus(string Sku, string Status);
record CompSet(string? Sku, List<Entry> Competitors);
record Entry(Competitor Competitor, Price? Price);
record Competitor(string Name);
record Price(string Amount);
from decimal import Decimal

import requests
from odoo import models

API = "https://api.getprice.ai/v1"


class ProductProduct(models.Model):
    _inherit = "product.product"

    def action_getprice_competitor_prices(self):
        """Post the cheapest fresh competitor price.

        Up to 100 products per call.
        """
        icp = self.env["ir.config_parameter"].sudo()
        key = icp.get_param("getprice.api_key")
        resp = requests.get(
            f"{API}/comparison-sets",
            params=[
                ("sku", p.default_code) for p in self
            ],
            headers={"Authorization": f"Bearer {key}"},
            timeout=30,
        )
        resp.raise_for_status()
        sets = {
            s["sku"].strip().upper(): s
            for s in resp.json()["data"]
        }
        for product in self:
            sku = product.default_code.strip().upper()
            cset = sets.get(sku, {})
            entries = cset.get("competitors", [])
            offers = [
                e
                for e in entries
                if e["price"]
                and not e["stale"]
                and e["match"]["review"] == "same"
            ]
            if not offers:
                continue
            best = min(
                offers,
                key=lambda e: Decimal(
                    e["price"]["amount"]
                ),
            )
            name = best["competitor"]["name"]
            price = best["price"]
            line = f"{name}: R{price['amount']}"
            if price["was"]:  # on promotion
                line += f" (was R{price['was']})"
            product.message_post(
                body=f"Cheapest: {line}"
            )
Response
200
// shortened: the first set, 3 of its competitors
{
  "data": [
    {
      "id": "set_x7Kp2Lm9",
      "name": "Baked Beans in Tomato Sauce 410g",
      "sku": "10072L",
      "own_product": {
        "id": "prd_8fK2mQa1",
        "name": "Baked Beans in Tomato Sauce 410g",
        "url": "https://shop.example.com/product/10072L",
        "price": {
          "amount": "18.99",
          "was": null,
          "currency": "ZAR"
        },
        "last_collected_at": "2026-11-02T04:12:09Z",
        "stale": false
      },
      "competitors": [
        {
          "competitor": {
            "id": "cmp_3LqV8nP2",
            "name": "Harbour Market",
            "domain": "harbourmarket.example.com"
          },
          "product": {
            "id": "prd_Q2vN9cD4",
            "name": "Baked Beans 410g",
            "url": "https://harbourmarket.example.com/baked-beans-in-tomato-sauce-410g"
          },
          "price": {
            "amount": "17.99",
            "was": "19.99",
            "currency": "ZAR"
          },
          "last_collected_at": "2026-11-02T03:05:11Z",
          "availability": "unknown",
          "status": "active",
          "stale": false,
          "match": {
            "review": "same",
            "reviewed_by": "customer",
            "confidence": null
          }
        },
        {
          "competitor": {
            "id": "cmp_7RwK4tB9",
            "name": "Cape Fresh",
            "domain": "capefresh.example.com"
          },
          "product": {
            "id": "prd_Hm3Wc8Kp",
            "name": "Baked Beans In Tomato Sauce 410g",
            "url": "https://capefresh.example.com/baked-beans-in-tomato-sauce-410g"
          },
          "price": {
            "amount": "18.99",
            "was": null,
            "currency": "ZAR"
          },
          "last_collected_at": "2026-11-02T03:11:40Z",
          "availability": "unknown",
          "status": "active",
          "stale": false,
          "match": {
            "review": "same",
            "reviewed_by": "getprice",
            "confidence": 0.94
          }
        },
        {
          "competitor": {
            "id": "cmp_9TzM2cX5",
            "name": "Northwind Wholesale",
            "domain": "northwindwholesale.example.com"
          },
          "product": {
            "id": "prd_Zt6Pa2Rn",
            "name": "Baked Beans In Tomato Sauce 410g",
            "url": "https://northwindwholesale.example.com/baked-beans-in-tomato-sauce-410g"
          },
          "price": {
            "amount": "17.99",
            "was": null,
            "currency": "ZAR"
          },
          "last_collected_at": "2026-11-02T03:20:05Z",
          "availability": "unknown",
          "status": "active",
          "stale": false,
          "match": {
            "review": "unreviewed",
            "reviewed_by": null,
            "confidence": 0.81
          }
        }
      ],
      "integrity": "ok",
      "updated_at": "2026-11-02T04:14:00Z"
    }
  ],
  "next_cursor": null
}
Full example in the reference
You want toCall
Check that your key worksGET /v1/me
Get competitor prices for up to 100 SKUsGET /v1/comparison-sets?sku=…&sku=…
Sync every comparison set into your ERPGET /v1/comparison-sets
Get one comparison setGET /v1/comparison-sets/{set_id}
Find one of your products to link a SKUGET /v1/products?q=…
See which competitors GetPrice tracks for youGET /v1/competitors
Link or unlink your SKUsPUT or DELETE /v1/sku-mappings/{sku}

Prices are read-only. The only thing you can change is which of your SKUs points at which of your products.