# BikeShop Brasil Bicicletas Catalog Scraper (`maximedupre/bikeshop`) Actor

Collect the current bicycle catalog from BikeShop.com.br. Get product links, IDs when available, brands, categories, BRL prices, stock status, images, specifications, installment offers when shown, and collection times.

- **URL**: https://apify.com/maximedupre/bikeshop.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 bicycle products

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

### 🚲 BikeShop bicycle catalog for price and stock research

Bike retailers, ecommerce teams, product researchers, and developers can use BikeShop to collect the current public bicycle catalog from [BikeShop.com.br](https://www.bikeshop.com.br/). Each saved row includes product links, identifiers when available, brand and category details, BRL prices, stock status, and the collection time, plus images, specifications, and installment offers when shown. Use the rows to review a product range, compare current prices, or build a catalog export.

- Find local listings for **[Bike Shop Near Me](https://apify.com/maximedupre/bikeshop/examples/bike-shop-near-me)** and review the matching shop results.
- Check **[Electric Bike Shop Near Me](https://apify.com/maximedupre/bikeshop/examples/electric-bike-shop-near-me)** for nearby electric-bike options.
- Compare **[Used Bike Shops Near Me](https://apify.com/maximedupre/bikeshop/examples/used-bike-shops-near-me)** when you need used-bike options.
- Find **[Giant Bike Dealers Near Me](https://apify.com/maximedupre/bikeshop/examples/giant-bike-dealers-near-me)** for a focused dealer search.
- Narrow the search with **[Bike Shop Near Me Within 5 Mi](https://apify.com/maximedupre/bikeshop/examples/bike-shop-near-me-within-5-mi)** to look within five miles.

#### 📦 BikeShop product rows

Each dataset row is one bicycle product from the current public BikeShop.com.br catalog. Required values include the product name and link, regular and current prices in Brazilian reais, stock status, and collection time. When the source shows them, rows also include a product ID or SKU, brand, subcategory, cleaned description, specifications, image links, discount percentage, and installment offers.

**Snapshot details**

Prices are a current catalog snapshot, not a price history. `inStock` shows availability, but the Actor does not promise an exact inventory quantity. `collectedAt` tells you when the row was collected.

#### 🚀 Run a BikeShop catalog snapshot

**Run steps**

1. Leave `Maximum products` empty to return all available products until the source is exhausted, or enter a positive number to stop after that many products.
2. Start the run.
3. Open the default dataset to review the bicycle product rows.

The Actor reads the public bicycle catalog from BikeShop.com.br. It does not search other retailers, private or authenticated catalogs, historical prices, alerts, or exact inventory quantities. You do not need to provide source credentials or an API key.

#### ⚙️ Input

The only public input is `maxItems`. Leave it empty to return all available products until the source is exhausted. Enter a positive integer when you want to cap the number of products returned.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `maxItems` | integer | Optional number of products to return. Leave it empty to return all available products until the source is exhausted, or enter a positive number to stop after that many products. |

**Example input**

This is the empty input from a successful default run. It returns all available products until the source is exhausted.

```json
{
}
```

#### 🧾 Output

The run output links to the default dataset. The dataset stores one row for each bicycle product.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `datasetItems` | string | Links to the bicycle product rows in the default dataset. |

**Dataset rows**

| Field | Type | What it does |
| --- | --- | --- |
| `productName` | string | Name of the bicycle product. |
| `productId` | string, optional | Retailer product ID or SKU when provided. |
| `productUrl` | string (URL) | Main BikeShop.com.br page for the product. |
| `brand` | string, optional | Brand of the bicycle product when shown. |
| `category` | string | Top-level product category. |
| `subcategory` | string, optional | Product subcategory when shown. |
| `description` | string | Product description with HTML removed. |
| `specifications` | array of objects | Product specifications or variant attributes. |
| `specifications[].name` | string | Name of a specification or attribute. |
| `specifications[].value` | string | Value of a specification or attribute. |
| `imageUrls` | array of strings | Product image links exposed by the catalog. |
| `imageUrls[]` | string (URL) | URL of one product image. |
| `regularPriceBrl` | number | Regular or list price in Brazilian reais. |
| `salePriceBrl` | number | Current price in Brazilian reais. |
| `discountPercent` | number, optional | Discount percentage when the product is on sale. |
| `inStock` | boolean | Whether the product is currently in stock. |
| `installments` | array of objects | Brazilian installment offers shown by the catalog. |
| `installments[].count` | integer | Number of payments in one offer. |
| `installments[].amountBrl` | number | Value of each payment in Brazilian reais. |
| `collectedAt` | date-time string | Time when this product was collected. |

**Example dataset row**

This is one complete row from a successful run with `maxItems` set to `100`.

```json
{
  "productName": "Bicicleta OGGI Big Wheel 7.0 2024",
  "productId": "226106",
  "productUrl": "https://www.bikeshop.com.br/loja/bicicleta-oggi-big-wheel-70-2024/",
  "brand": "OGGI",
  "category": "Bicicletas",
  "subcategory": "Mountain Bike Aro 29",
  "description": "Home / Loja / Bicicletas / Mountain Bike Aro 29 / Bicicleta OGGI Big Wheel 7.0 2024 Bicicleta OGGI Big Wheel 7.0 2024 R$ 2.999,00 em até 12x de R$ 249,92 sem juros ou R$ 2.849,05 à vista Tamanho Escolha uma opçãoSMLXL S M L XL Cor Escolha uma opçãoPreto / AzulPreto / Vermelho / DouradoVerde Agua / AmareloGrafite / VermelhoGrafite / Verde Limpar Bicicleta OGGI Big Wheel 7.0 2024 quantidade Adicionar ao carrinho",
  "specifications": [
    {
      "name": "Tamanho",
      "value": "L"
    },
    {
      "name": "Tamanho",
      "value": "M"
    },
    {
      "name": "Tamanho",
      "value": "S"
    },
    {
      "name": "Tamanho",
      "value": "XL"
    },
    {
      "name": "Cor",
      "value": "Grafite / Verde"
    },
    {
      "name": "Cor",
      "value": "Grafite / Vermelho"
    },
    {
      "name": "Cor",
      "value": "Preto / Azul"
    },
    {
      "name": "Cor",
      "value": "Preto / Vermelho / Dourado"
    },
    {
      "name": "Cor",
      "value": "Verde Agua / Amarelo"
    }
  ],
  "imageUrls": [
    "https://www.bikeshop.com.br/wp-content/uploads/2021/10/big-wheel-70-azul.jpg",
    "https://www.bikeshop.com.br/wp-content/uploads/2021/10/big-wheel-70-vermelho-dourado.jpg",
    "https://www.bikeshop.com.br/wp-content/uploads/2021/10/big-wheel-70-verde-agua.jpg",
    "https://www.bikeshop.com.br/wp-content/uploads/2021/10/big-wheel-70-cinza-vermelho.jpg",
    "https://www.bikeshop.com.br/wp-content/uploads/2021/10/big-wheel-70-cinza-verde.jpg",
    "https://www.bikeshop.com.br/wp-content/uploads/2022/01/oggi-guia-tamanho-mtb.jpg"
  ],
  "regularPriceBrl": 2999,
  "salePriceBrl": 2999,
  "inStock": true,
  "installments": [
    {
      "count": 12,
      "amountBrl": 249.92
    }
  ],
  "collectedAt": "2026-08-11T01:36:50.190Z"
}
```

#### 💳 Pricing

**Bicycle product**

This Actor uses pay-per-event pricing. One event is charged for each bicycle product saved to the dataset. The `maxItems` limit can cap how many product rows are saved and charged.

#### 🔌 Integrations

**Dataset access**

Open the default dataset after a run, or use its dataset URL with Apify's API and export tools.

For a short guide, watch:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I use this to find bike shops near Norfolk, Virginia?

No. This Actor reads BikeShop.com.br's public bicycle catalog. It does not search local stores in Norfolk or any other area.

##### Does this find bike shops near me?

No. It collects the public bicycle catalog from BikeShop.com.br. It does not search nearby retailers or arbitrary bike shops.

##### Does it cover other bike retailers or private catalogs?

No. Its scope is the public bicycle catalog on BikeShop.com.br, not private or authenticated catalogs and not other retailers.

##### What happens when I leave Maximum products empty?

The Actor returns all available products until the source is exhausted. Enter a positive number when you want to stop after that many products.

##### Are the prices in Brazilian reais?

Yes. `regularPriceBrl` and `salePriceBrl` use Brazilian reais, and the field names identify the currency as BRL.

##### Does it return exact stock counts?

No. It returns the `inStock` status. The Actor does not promise an exact quantity for each product.

##### Does it keep price history or send alerts?

No. Each run is a current catalog snapshot. Price history, alerts, and change monitoring are outside its scope.

##### What if the source does not show a product field?

Optional fields can be absent when BikeShop.com.br does not show that value. The Actor does not invent missing product data.

##### Do I need source credentials or an API key?

No. The Actor uses the public BikeShop.com.br catalog, so you do not need to provide source credentials or an API key.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~bikeshop/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [MercadoLibre Search Scraper](https://apify.com/maximedupre/mercado-libre-search-scraper) — Compare BikeShop.com.br prices with MercadoLibre listings, sellers, shipping, and visible ratings.
- [Amazon Price Tracker](https://apify.com/maximedupre/amazon-price-tracker) — Track a reference product's current Amazon price, discount, seller, and availability.
- [Trendyol Scraper](https://apify.com/maximedupre/trendyol-scraper) — Collect another public marketplace's products, prices, sellers, ratings, and specifications.
- [Allegro Scraper](https://apify.com/maximedupre/allegro-scraper) — Build product listing and price comparisons from Allegro categories or searches.
- [John Lewis Product Scraper](https://apify.com/maximedupre/john-lewis-product-scraper) — Review a UK retailer's product, variant, price, stock, image, and specification data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Optional number of products to return. Leave this empty to return all available products until the source is exhausted.

## Actor input object example

```json
{
  "maxItems": 20
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Link to the bicycle product rows in the default dataset.

# 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 = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/bikeshop").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 = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/bikeshop").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 '{
  "maxItems": 20
}' |
apify call maximedupre/bikeshop --silent --output-dataset

```

## MCP server setup

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

```

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/Uw0nT3z2xUSKDWDEj/builds/wmLHdz9FOiDp3T1lg/openapi.json
