# Flying Tiger Scraper — European Variety Store Products (`studio-amba/flyingtiger-scraper`) Actor

Scrape products, prices, and stock status from flyingtiger.com, Flying Tiger Copenhagen's pan-European variety and discount retail chain. Browse the full catalogue, filter by collection, or search by keyword.

- **URL**: https://apify.com/studio-amba/flyingtiger-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Flying Tiger Scraper — European Variety Store Products & Prices

Pull Flying Tiger Copenhagen's full product catalogue — names, prices, stock status, images, and categories — straight from the site's own data feed, without opening the store yourself.

### What is Flying Tiger Copenhagen?

Flying Tiger Copenhagen is a Danish variety-goods retailer with stores across Europe — home decor, party supplies, stationery, toys, hobby craft, kitchenware, and gadgets at low, playful prices. Same customer intent as Action or TEDi, distinct Scandinavian design angle.

Flying Tiger runs a single global online storefront at flyingtiger.com (Shopify), with one catalogue and one currency (EUR) across every market it serves — verified live, not assumed. This scraper reads that catalogue directly from the site's own JSON feed, the same data the storefront itself renders from.

Here's what people use it for:

- **Discount/variety-retail price benchmarking** — compare Flying Tiger's price points against Action, TEDi, or your own catalogue in the same household/party/gift-goods segment.
- **Assortment tracking** — Flying Tiger rotates seasonal and campaign items (its own tags mark seasonal drops). Scheduled runs catch what's new before it sells out.
- **Sale/discount monitoring** — the feed carries both current and pre-discount "compare at" price, so markdown tracking doesn't need a second lookup.
- **Category-level market research** — granular category tags (party decorations, arts & crafts, kitchen storage, and 100+ others) give a clean cross-section of the variety-goods segment.

### How to scrape flyingtiger.com data

The scraper supports three input modes.

#### Browse all products (default)

Leave the input empty (or just set `maxResults`) and the actor pages through the full catalogue.

```json
{
    "maxResults": 200
}
```

#### Browse a collection

Pass a Shopify collection handle — copy it from the URL after `/collections/` on flyingtiger.com (e.g. `party-decorations`, `home`, `travel`).

```json
{
    "collection": "party-decorations",
    "maxResults": 200
}
```

#### Search by keyword

```json
{
    "searchQuery": "candle",
    "maxResults": 20
}
```

Search first checks the site's own search-suggest index (a handful of top matches), then — if you asked for more results than that returns — falls back to scanning the full catalogue and filtering on title, brand, category, and tags. Use collection browsing instead of search if you need exhaustive coverage of a topic.

**Precedence:** `searchQuery` > `collection` > browse-all. An empty `{}` input still returns real data (browse-all mode).

### What data does Flying Tiger Scraper extract?

- **Product name**
- **Brand** — always "Flying Tiger Copenhagen" (own-brand retailer, no third-party lines)
- **Price and currency** — always EUR, flyingtiger.com is a single-market storefront (verified live: price is identical regardless of locale path or language cookie)
- **Original price** — the pre-discount "was" price, only present when the item is on sale (~12% of the catalogue in a live sample)
- **Category** — broad category (Party, Home, Toy, Hobby, Kitchen, Gadget, Textile, Office, Glasses, Personal care, Game)
- **Categories** — granular category tags as published by the site (100+ distinct values, e.g. "Party decorations", "Arts crafts", "Kitchen storage practical things")
- **SKU** — Flying Tiger's own internal product code
- **Product ID** — Shopify's internal product ID
- **In stock** — whether the item is currently available online (roughly 60% of the catalogue at any time — many items are seasonal or in-store only)
- **Image URL** and full image list
- **Description**
- **URL** — the product's page on flyingtiger.com

Example output (real run):

```json
{
    "name": "Mini play dough set",
    "brand": "Flying Tiger Copenhagen",
    "price": 5.00,
    "currency": "EUR",
    "category": "Hobby",
    "categories": ["Arts crafts", "Crafts", "Other crafts DIY supplies"],
    "sku": "3063536",
    "productId": "15185053811036",
    "inStock": false,
    "imageUrl": "https://cdn.shopify.com/s/files/1/0526/7144/7238/files/flying-tiger-copenhagen-hobby-default-title-mini-play-dough-set-67863851336028.jpg",
    "url": "https://flyingtiger.com/products/mini-play-dough-set-3063536",
    "scrapedAt": "2026-08-22T14:03:22.000Z"
}
```

### How much does it cost?

Flying Tiger Scraper uses pay-per-event pricing: $0.005 per Actor start plus $0.002 per result (per scraped product). Platform usage (compute + proxy) is included in these prices.

| Scenario | Cost |
|---|---|
| 100 products (one collection) | ~$0.21 |
| 500 products (multiple collections) | ~$1.01 |
| 5,000 products (large catalogue scan) | ~$10.01 |

A run's usage cost only settles once the run reports SUCCEEDED — reading the dataset mid-run, before the run finishes, will undercount what it ends up costing. If a run fails, you are charged for the results it delivered before failing, not for the failed attempt itself.

### Can I integrate?

Apify integrates natively with the tools you already use:

- **Google Sheets** — push scraped data directly into a spreadsheet
- **Webhooks** — trigger your pipeline when a run finishes
- **Zapier / Make** — connect Flying Tiger data to thousands of apps
- **Amazon S3 / Google Cloud Storage** — export datasets to cloud storage
- **PostgreSQL / MySQL** — store results in your own database

### Can I use it as an API?

Yes. Call Flying Tiger Scraper programmatically from any language.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/flyingtiger-scraper").call(run_input={
    "collection": "party-decorations",
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} — {item['price']} {item['currency']}")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/flyingtiger-scraper').call({
    collection: 'party-decorations',
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(`${item.name} — ${item.price} ${item.currency}`));
```

### FAQ

**Does this scraper need a proxy?**
Yes — RESIDENTIAL, by default. flyingtiger.com's open `products.json` feed itself has no bot-detection (plain HTTP requests get clean 200s), but Shopify rate-limits the feed by IP regardless — Apify's shared/automatic proxy pool gets 429'd because those IPs are already busy with Shopify traffic from other scrapers. The actor also backs off automatically on a 429.

**Does this cover every European market Flying Tiger operates in?**
flyingtiger.com is Flying Tiger's single global storefront — one catalogue, one currency (EUR), regardless of which country you'd browse it from. There's no separate per-country catalogue or pricing to cover; the old `flyingtiger.dk` domain is dead (parked at a domain broker), not a second market to scrape.

**Why is `inStock` sometimes false for products that are clearly for sale?**
Flying Tiger's online storefront doesn't mirror in-store availability 1:1 — a meaningful share of the catalogue (roughly 40% in a live sample) is seasonal, campaign, or in-store-only stock that shows as unavailable online. This is the site's own signal, not a scraping gap.

**Does the scraper handle pagination automatically?**
Yes. It pages the site's own feed at the verified 250-item-per-request ceiling until it hits the end of the catalogue/collection or your `maxResults` cap.

**Can I get every product in one run?**
Yes, set `maxResults` above the catalogue size (low tens of thousands — check the run log for the actual total). Large full-catalogue runs cost proportionally more; see the pricing table above.

### Limitations

- Free-text search only covers the site's own top-matches index for an exhaustive-feeling query; for full topical coverage, browse a collection instead.
- Flying Tiger products are almost entirely single-SKU (no size/colour variant matrix in a live sample of 250 products) — this scraper returns one row per product, not per variant, which matches how the catalogue is actually structured.
- No EAN/barcode field — Flying Tiger doesn't publish one in its product feed (own-brand retailer, not a multi-brand reseller with manufacturer codes to expose).
- Category tags reflect Flying Tiger's own taxonomy and can change between runs if the site reorganizes a category.

### Other discount and variety retail scrapers

Looking for data from other European discount retailers? Check out these scrapers from our collection:

- [Action Scraper](https://apify.com/studio-amba/action-scraper) — Europe's fastest-growing non-food discount retailer
- [TEDi Scraper](https://apify.com/studio-amba/tedi-scraper) — Pan-European discount variety retail across six countries
- [Douglas.de Scraper](https://apify.com/studio-amba/douglas-de-scraper) — Germany's #1 perfumery/health & beauty chain
- [Bipa Scraper](https://apify.com/studio-amba/bipa-scraper) — Austrian drugstore and beauty retailer
- [Etos Scraper](https://apify.com/studio-amba/etos-scraper) — Dutch drugstore and health & beauty chain

### Your feedback

Found a bug? Missing a field? Want a collection-discovery mode added? Open an issue on the actor's page or reach out through the Apify platform. We actively maintain this scraper and ship fixes fast.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by keyword (e.g., 'candle', 'party', 'notebook'). Leave empty to browse all products.

## `collection` (type: `string`):

Shopify collection handle to scrape (e.g., 'party-decorations', 'home', 'travel'). Leave empty for all products.

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `proxyConfiguration` (type: `object`):

Proxy settings. flyingtiger.com's open products.json feed rate-limits by IP regardless of anti-bot layer — Apify's shared/automatic proxy pool gets 429'd because those IPs are already hot with Shopify traffic. RESIDENTIAL is required for reliable full-catalogue runs (see docs/site-recon/flyingtiger-com.md).

## Actor input object example

```json
{
  "searchQuery": "candle",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "candle",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/flyingtiger-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "candle",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/flyingtiger-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "candle",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/flyingtiger-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/flyingtiger-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HjsNXLfM5KaJh32Q5/builds/Sh9CiFLqhB523PMtb/openapi.json
