# Quickstart: every retailer's price for one product in 5 minutes

> Make your first ShopSavvy Data API call with curl: look up a product by UPC, read its offers and credit cost, then pick an SDK in one of 10 languages.

*Source: https://shopsavvy.com/data/documentation/quickstart* · Part of the [ShopSavvy Data API documentation](https://shopsavvy.com/data/documentation.md)

---

**Get every retailer's price for one product in about 5 minutes.** You'll make one request with `curl`, read the response, and know what it cost.

## Before you start

- **An API key.** Keys come with a Data API plan: start the [14-day Starter trial](https://shopsavvy.com/data#pricing), then copy a key from [API Keys](https://shopsavvy.com/data/api-keys). Your first key is created automatically when the subscription starts. Keys look like `ss_live_` followed by 32 characters.
- **curl.** Check it's installed with `curl --version`. Any HTTP client works; the [SDKs](https://shopsavvy.com/data/documentation/sdk-typescript) wrap the same calls.

No key yet? The [playground](https://shopsavvy.com/data/playground) shows real response shapes in your browser without one.

## 1. Put your key in an environment variable

```bash
export SHOPSAVVY_API_KEY="ss_live_your_api_key_here"
```

## 2. Ask for every retailer's current price for one barcode

`611247373064` is the UPC of a Keurig K-Mini coffee maker. Any identifier works in its place: UPC, EAN, ISBN, ASIN, model number, MPN, a product URL at any retailer, or a ShopSavvy product ID.

```bash
curl "https://api.shopsavvy.com/v1/products/offers?ids=611247373064" \
  -H "Authorization: Bearer $SHOPSAVVY_API_KEY"
```

## 3. Read the response

You get the product, an `offers` array with one entry per retailer listing, and a `meta` block. This is trimmed to two offers and a few product fields; your prices and timestamps will be current, not these:

```json
{
  "success": true,
  "data": [
    {
      "title": "Keurig K-Mini Single Serve K-Cup Pod Coffee Maker, 6 to 12oz Brew size, with Cord Storage, Perfect for Small Spaces, Black",
      "brand": "Keurig",
      "shopsavvy": "products/3ONn300xybP3y66ibqc1",
      "barcode": "611247373064",
      "amazon": "B07GV2S1GS",
      "model": "K-Mini",
      "match": { "identifier": "611247373064", "by": "barcode", "candidates": 1 },
      "offers": [
        {
          "id": "4c3bb2ea-f37c-4dcd-90f4-eba7280d7473",
          "availability": "in",
          "condition": "new",
          "condition_grade": "new",
          "retailer": "Best Buy",
          "currency": "USD",
          "price": 99.99,
          "is_marketplace": false,
          "URL": "https://www.bestbuy.com/site/-/-.p?skuId=6358476",
          "timestamp": "2026-10-12T01:33:09.069Z",
          "history": []
        },
        {
          "id": "bk-93f02932398a06f9c68522ceda3a36da",
          "availability": "in",
          "condition": "used",
          "condition_grade": "unknown",
          "retailer": "Amazon",
          "currency": "USD",
          "price": 44.99,
          "seller": "Tech & Beyond",
          "is_marketplace": true,
          "URL": "https://www.amazon.com/dp/B07GV2S1GS?th=1&psc=1",
          "timestamp": "2026-10-12T01:32:49.321Z",
          "history": []
        }
      ]
    }
  ],
  "meta": {
    "request_id": "4f9d2c1e-…",
    "credits_used": 3,
    "credits_remaining": 997,
    "rate_limit_remaining": 999
  }
}
```

## What just happened

- `match` shows which identifier produced the product and how (`barcode` is an exact match). See [How Identifiers Are Matched](https://shopsavvy.com/data/documentation/product-details#how-identifiers-are-matched).
- Each offer is one listing: `retailer`, `price` and `currency`, `availability` (omitted when unknown), `condition`, and `is_marketplace` with `seller` when a third-party seller is behind it. `timestamp` is when ShopSavvy last saw that price.
- The call cost **3 credits** (all-retailer offers, per product found). A product with no offers, or an identifier that matches nothing, costs nothing. `meta.credits_remaining` is your balance after this call; `meta.rate_limit_remaining` is how many requests you have left in the rolling hour.

## Next steps

- Look up many products at once: pass up to 100 comma-separated identifiers in `ids`, or use [Batch Product Lookup](https://shopsavvy.com/data/documentation/product-batch).
- Track prices over time: [Price History](https://shopsavvy.com/data/documentation/offers-history) and [Scheduled Refreshes](https://shopsavvy.com/data/documentation/schedule-product) with [Webhooks](https://shopsavvy.com/data/documentation/webhooks).
- Handle failures: every [error](https://shopsavvy.com/data/documentation/errors) has a code, an `action` and a `docs_url`.
- Use an SDK in your language:

| Language | Install | Package |
|----------|---------|---------|
| TypeScript / JavaScript | `npm install @shopsavvy/sdk` | [npm](https://www.npmjs.com/package/@shopsavvy/sdk) |
| Python | `pip install shopsavvy-sdk` | [PyPI](https://pypi.org/project/shopsavvy-sdk/) |
| Ruby | `gem install shopsavvy-sdk` | [RubyGems](https://rubygems.org/gems/shopsavvy-sdk) |
| Go | `go get github.com/shopsavvy/sdk-go` | [pkg.go.dev](https://pkg.go.dev/github.com/shopsavvy/sdk-go) |
| Java | `com.shopsavvy:shopsavvy-sdk:1.1.0` (Maven / Gradle) | [Maven Central](https://central.sonatype.com/artifact/com.shopsavvy/shopsavvy-sdk) |
| Kotlin | `implementation("com.shopsavvy:shopsavvy-sdk-kotlin:1.1.0")` | [Maven Central](https://central.sonatype.com/artifact/com.shopsavvy/shopsavvy-sdk-kotlin) |
| C# / .NET | `dotnet add package ShopSavvy.Sdk` | [NuGet](https://www.nuget.org/packages/ShopSavvy.Sdk) |
| Rust | `cargo add shopsavvy-sdk` | [crates.io](https://crates.io/crates/shopsavvy-sdk) |
| Swift | `.package(url: "https://github.com/shopsavvy/sdk-swift.git", from: "1.3.0")` | [GitHub](https://github.com/shopsavvy/sdk-swift) |
| PHP | `composer config repositories.shopsavvy vcs https://github.com/shopsavvy/sdk-php` then `composer require shopsavvy/shopsavvy-sdk-php` | [GitHub](https://github.com/shopsavvy/sdk-php) |
