# Flink German Grocery Price & Stock Scraper (`rainminer/goflink-scraper`) Actor

Search Flink (goflink.com) for grocery products and export names, EUR prices, unit prices, stock, categories, and photos. Pick a German city so prices match local delivery. No login required. Schedule runs, download JSON/CSV/Excel, and monitor quick-commerce prices on Apify.

- **URL**: https://apify.com/rainminer/goflink-scraper.md
- **Developed by:** [rainminer](https://apify.com/rainminer) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.37 / 1,000 grocery products

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <a href="https://www.goflink.com/"><img src="https://res.cloudinary.com/goflink/image/upload/w_1200,h_480,c_fill,g_south,b_rgb:E3F7F7/f_png/de/category-backgrounds/DE_Milch_Eier2_no_background.png" alt="Flink grocery" width="100%"></a>
</p>

### What does Flink Grocery Product Scraper do?

**Flink Grocery Product Scraper** extracts **public grocery listings** from [Flink](https://www.goflink.com/) (goflink.com) — the German quick-commerce supermarket that delivers everyday products in minutes. Type a **search** such as `Milch` or `Bananen`, pick a **city**, and export structured catalog data — **product name, EUR price, unit price, stock, category, and photos** — without writing any code and **without logging in**.

Run it on the **Apify platform** to schedule crawls, export JSON/CSV/Excel, rotate proxies, monitor failures, and integrate results via API.

### Why scrape Flink grocery data?

- **Price monitoring** — Track EUR shelf prices and unit prices (per kg / per liter) in Berlin, Hamburg, Munich, and other German cities.
- **Assortment research** — See which SKUs Flink lists for milk, produce, snacks, and household brands.
- **Stock visibility** — Flag out-of-stock items and remaining quantity for replenishment models.
- **Promotions** — Capture original vs current price and on-pack labels such as best-price badges.
- **Competitive intelligence** — Compare Flink’s catalog with other German grocery and quick-commerce players.
- **City comparison** — Re-run the same search in another city to see local prices and availability.
- **Product content** — Optionally pull origin, ingredients, storage, and manufacturer from product pages.
- **Data pipelines** — Feed structured grocery rows into BI dashboards, pricing tools, or internal catalogs.
- **Market entry** — Size assortment depth before expanding a brand into quick commerce.
- **Journalism / reporting** — Document grocery prices in a specific German delivery area.
- **Retail media** — Spot sponsored search placements next to organic hits.
- **Brand tracking** — Watch a SKU or brand (for example Arla, Oatly, Red Bull) across Flink search.

### How to scrape Flink (goflink.com)

1. Open the Actor in [Apify Console](https://console.apify.com/).
2. Enter one or more **search terms** (for example `Milch`, `Skyr`, `Coca-Cola`).
3. Choose a **city**. Prices and stock follow the warehouse that delivers there.
4. Set **Maximum products** per search term (keep it small for a test run).
5. Keep **German residential proxies** enabled — Flink blocks datacenter traffic.
6. Run the Actor and download results from the **Dataset** tab (JSON, CSV, Excel, or HTML).

### What data can you extract from Flink?

| Field | Description |
| --- | --- |
| id / sku | Stable product identifier |
| name | Product title |
| price | Current shelf price |
| originalPrice | Pre-discount price when advertised |
| currency | Price currency (EUR) |
| unitPrice | Price per kg, liter, or other base unit |
| unitPriceUnit | Base unit (kg, l, st, …) |
| stockQuantity | Available quantity in that city |
| isOutOfStock | Whether the SKU is sold out |
| city | Delivery city you selected |
| category / subcategory | Aisle names |
| imageUrl / imageUrls | Primary photo and gallery |
| description, origin, ingredients | Extra fields when **Include ingredients and origin** is on |

### Input

Flink Grocery Product Scraper asks for **search terms**, a **city**, and **Maximum products** per term. Optionally turn on ingredients/origin and change the shop language (German or English). See the **Input** tab in Apify Console.

Flink prices are local. Berlin milk is not Hamburg milk — pick the city that matches the market you care about.

### Output

Each result is a structured grocery product. You can download the dataset in **JSON, CSV, Excel, or HTML**.

```json
{
  "id": "11011208",
  "sku": "11011208",
  "name": "Arla Skyr Natur 450g",
  "slug": "arla-skyr-natur-450g",
  "price": 2.29,
  "originalPrice": null,
  "currency": "EUR",
  "unitPrice": 5.09,
  "unitPriceUnit": "kg",
  "stockQuantity": 10,
  "isOutOfStock": false,
  "isPharma": false,
  "category": "Joghurt & Desserts",
  "city": "Berlin",
  "searchQuery": "Milch",
  "imageUrl": "https://res.cloudinary.com/goflink/image/upload/f_jpg/b_rgb:F8F8F8/w_456,ar_1:1,c_fill,g_south/product-images-prod/55273903-766b-491e-b307-0a5861048409.png",
  "scrapedAt": "2026-09-01T10:00:00.000Z"
}
```

### How much does it cost to scrape Flink?

This Actor is **pay per result plus Apify platform usage** (compute and residential proxies). You pay a maintenance fee for each grocery product (from **$0.49 per 1,000 results** on the FREE Store plan) and you also pay Apify usage for the run. Residential proxies are the default because Flink is bot-protected — that is the main usage driver.

**Include ingredients and origin** is a paid add-on. It opens each product page, so it costs extra events (from **$1.99 per 1,000 products** on the FREE Store plan) plus more compute and proxy usage.

A small test (a handful of products) usually finishes in a few minutes. Larger searches scale with **Maximum products** and whether the details add-on is enabled. Keep the limit small while testing.

### Is login required?

No. This Actor scrapes **public** Flink shop search results only. It does not access accounts, carts, or checkout.

### Is it legal to scrape Flink?

This Actor extracts **publicly visible catalog data** (products, prices, photos) that Flink shows to anyone who opens the shop. It does not collect private customer data such as emails or delivery addresses. You should still use the data in line with Flink’s terms, GDPR, and your own legal advice — especially if you republish prices or run automated purchasing.

### Tips

- Use one search term per product family (`Milch`, `Bananen`, `Kaffee`) so `Maximum products` stays meaningful.
- Keep **Maximum products** small while testing, then raise it for production.
- Turn on **Include ingredients and origin** only when you need that text — it is a paid add-on and slower.
- Re-run the same search in another **city** to compare local prices.

### Image Credit

Image credit: [goflink.com](https://www.goflink.com/)

# Actor input Schema

## `searchQueries` (type: `array`):

What to look up in the Flink shop, one product or brand per line. Examples: Milch, Bananen, Coca-Cola, Hafermilch.

## `city` (type: `string`):

German city to price against. Flink stock and EUR prices depend on the warehouse that delivers there.

## `maxItems` (type: `integer`):

How many products to save per search term.

## `scrapeProductDetails` (type: `boolean`):

Also open each product for description, origin, ingredients, storage, and manufacturer. This is a paid add-on on top of the per-product fee, and it takes longer.

## `language` (type: `string`):

Product names and descriptions from the Flink shop.

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

Flink is bot-protected. Keep German residential proxies on unless you know you do not need them.

## Actor input object example

```json
{
  "searchQueries": [
    "Milch"
  ],
  "city": "berlin",
  "maxItems": 5,
  "scrapeProductDetails": false,
  "language": "de",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "searchQueries": [
        "Milch"
    ],
    "city": "berlin",
    "language": "de",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/goflink-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 = {
    "searchQueries": ["Milch"],
    "city": "berlin",
    "language": "de",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rainminer/goflink-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 '{
  "searchQueries": [
    "Milch"
  ],
  "city": "berlin",
  "language": "de",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call rainminer/goflink-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rainminer/goflink-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/mThTHdEvteXFRzAab/builds/Add9FJRbTuFF2ccAj/openapi.json
