# Blibli Affiliate Link Generator & Content Parser (`zucchini_gopher_m2v/blibli-affiliate-content-generator`) Actor

Source best-selling, high-rated Blibli products (optionally official-warranty only), extract images and clean descriptions, and generate share links plus ready-to-post captions. Built for affiliate and content marketers. No login needed.

- **URL**: https://apify.com/zucchini\_gopher\_m2v/blibli-affiliate-content-generator.md
- **Developed by:** [Faisal Ahdan naufal](https://apify.com/zucchini_gopher_m2v) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.40 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Blibli Affiliate Link Generator & Content Parser

Source best-selling, well-rated [Blibli](https://www.blibli.com) products —
optionally only ones with an **official warranty** — and get back everything
a post needs: full-size images, a clean short description, a tracking link,
and a ready-to-paste caption.

Built for affiliate and content marketers who would otherwise copy this out
of the browser one product at a time.

No login, no API key. HTTP-only — no browser.

### ⚠️ Read this first: what "affiliate link" means here

This actor produces **tracking links, not commission links.**

Blibli's commission API (`/backend/affiliate/commission`) returns **401
without an authenticated affiliate account**, so commission attribution
cannot be done without a login and is out of scope for this actor.

What it *does* do, using Blibli's own **public** endpoint:

- mints Blibli's official **OneLink** short link
  (`https://blibli.onelink.me/GNtk/…`) for each product, which opens the
  Blibli app or product page; and
- stamps **your** `utm_campaign` / `utm_source` / `utm_medium` onto every
  link — which is where your affiliate or creator ID goes.

If your affiliate programme attributes on UTM values or on a link you
register yourself, this gives you exactly what you need at scale. If it
requires Blibli-issued per-marketer links, generate those in your affiliate
dashboard and use this actor for the product sourcing and content instead.

### What you get per product

```json
{
  "sku": "BLG-60035-03503",
  "name": "HP 14-ep0260TU Laptop - Gold [i3-1315U/8GB/512GB/Win11...]",
  "brand": "HP",
  "salePrice": 8999000,
  "listPrice": 9499000,
  "discountPercent": 5,
  "rating": 4.7,
  "reviewCount": 12,
  "soldCount": 335,

  "warrantyText": "Garansi resmi 2 tahun",
  "hasOfficialWarranty": true,
  "isOfficialStore": true,
  "merchantBadge": "Diamond",

  "sellingPoints": ["Processor : Intel Core i3-1315U", "Memory : 8GB DDR4-3200"],
  "shortDescription": "Processor : Intel Core i3-1315U · Memory : 8GB DDR4-3200 · ...",
  "primaryImage": "https://www.static-src.com/.../catalog/full/.../hp_..._full01.webp",

  "productUrl":  "https://www.blibli.com/p/hp-14-ep0260tu.../ps--BLG-60035-03503",
  "trackedUrl":  "https://www.blibli.com/p/...?utm_campaign=aff-budi&utm_source=instagram&utm_medium=social",
  "shareLink":   "https://blibli.onelink.me/GNtk/0jt5f7nm",

  "caption": "HP 14-ep0260TU Laptop - Gold ...\nRp8.999.000 (diskon 5%, dari Rp9.499.000)\n4.7 bintang - 335 terjual\nProcessor : Intel Core i3-1315U · ...\nhttps://blibli.onelink.me/GNtk/0jt5f7nm"
}
```

`caption` is rendered from your own template, so you can match your posting
style. Placeholders: `{name} {brand} {price} {listPrice} {discount} {rating}
{reviewCount} {sold} {warranty} {description} {link} {merchant}`.

### Input

```json
{
  "searchTerms": ["laptop", "headphone"],
  "sortBy": "bestSelling",
  "minRating": 4,
  "minReviewCount": 10,
  "officialWarrantyOnly": true,
  "generateShareLink": true,
  "enrichFromProductPage": true,
  "trackingCampaign": "aff-budi-sep2026",
  "trackingSource": "instagram",
  "trackingMedium": "social"
}
```

| Field | Description |
| --- | --- |
| `searchTerms` / `categories` | What to source from |
| `sortBy` | `bestSelling` (default), `relevance`, `cheapest`, `mostExpensive`, `newest` |
| `minRating` / `minReviewCount` / `minSoldCount` | Quality gates — a 5★ rating from 2 reviews is not a selling point |
| `minDiscountPercent` | Only products with a real discount |
| `officialWarrantyOnly` | **Garansi Resmi** only — original, officially warranted stock |
| `officialStoreOnly` / `topRatedSellerOnly` | Restrict to official brand stores / top-rated sellers |
| `generateShareLink` | Mint Blibli's OneLink per product (1 extra request each) |
| `trackingCampaign` / `trackingSource` / `trackingMedium` | Your UTM values, stamped on every link |
| `captionTemplate` | Your caption format; empty disables captions |
| `enrichFromProductPage` | Adds warranty wording, SEO description and stock (1 extra request each) |
| `imageSize` | `full` (default), `medium`, `thumbnail` |
| `maxItemsPerQuery`, `maxConcurrency` | Volume and politeness |
| `proxyConfiguration` | Residential + country `ID` **strongly recommended** |

### Notes that will save you time

- **`warrantyText` needs `enrichFromProductPage`.** Blibli's search results
  return `warranty: null`; the wording exists only on the product page. The
  `officialWarrantyOnly` *filter* works either way — it is applied by Blibli
  server-side — but quoting "Garansi resmi 2 tahun" in a caption needs the
  enrichment pass.
- **Tight filters can legitimately return nothing.** `laptop gaming` at 4★
  with an official warranty yields 66 products, but most have under 10
  reviews — so `minReviewCount: 10` empties it. The run then emits an
  `EMPTY_RESULT` row naming which filter to loosen, rather than a silently
  empty dataset.
- **Links are deterministic.** The same product with the same tracking
  values always mints the same OneLink, so re-running a job does not
  produce a pile of duplicate links.
- **Use a residential proxy for real runs.** This actor makes up to three
  requests per product, and Blibli throttles sustained traffic from one IP.

### Known limits

- **No commission attribution** — see the warning above.
- Blibli serves at most **800 products per query**; widen with more search
  terms or categories rather than a bigger `maxItemsPerQuery`.
- `shortDescription` is built from seller-written spec bullets, so quality
  varies by listing. With enrichment on, `seoDescription` is often better
  prose.
- Everything is in Indonesian.

See [CRAWLING\_METHOD.md](CRAWLING_METHOD.md) for the endpoint evidence
behind the affiliate-link statement, the measured filter funnel, and the
content-parsing details.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to source products from, e.g. \["laptop gaming", "skincare"]. Combine with the quality filters below to surface only products worth promoting.

## `categories` (type: `array`):

Blibli category codes or full category URLs, e.g. \["TI-1000001"] or \["https://www.blibli.com/c3/memory-card/ME-1000006"].

## `sortBy` (type: `string`):

How Blibli orders the source list. 'bestSelling' is the default and what most affiliate sourcing wants.

## `minRating` (type: `integer`):

Keep only products rated at least this many stars. Pushed to Blibli's own rating filter where possible, then enforced exactly on each product's real rating. 0 disables.

## `minReviewCount` (type: `integer`):

Skip products with too few reviews for the rating to mean anything. 0 disables.

## `minSoldCount` (type: `integer`):

Keep only proven sellers. 0 disables.

## `minDiscountPercent` (type: `integer`):

Keep only products discounted by at least this much - a discount makes a far better post. Pushed to Blibli's discount facet (buckets of 10/25/50/75) and then enforced exactly. 0 disables.

## `officialWarrantyOnly` (type: `boolean`):

Restrict to products carrying an official manufacturer warranty - the 'produk orisinal bergaransi resmi' filter. Applied server-side by Blibli.

## `officialStoreOnly` (type: `boolean`):

Keep only products sold by an official brand store, which are the safest to promote.

## `topRatedSellerOnly` (type: `boolean`):

Restrict to sellers Blibli marks as top rated.

## `generateShareLink` (type: `boolean`):

Mint Blibli's own OneLink short link (blibli.onelink.me/...) for each product, carrying your tracking values. Costs one extra request per product. NOTE: this is a tracking/deep link, not a commission link - see the actor README on what Blibli's affiliate commission API requires.

## `trackingCampaign` (type: `string`):

Stamped onto every link as utm\_campaign. This is where your affiliate or creator ID goes, e.g. 'aff-yourname-sep2026'.

## `trackingSource` (type: `string`):

Stamped onto every link as utm\_source, e.g. 'instagram', 'tiktok', 'blog'.

## `trackingMedium` (type: `string`):

Stamped onto every link as utm\_medium, e.g. 'social', 'bio-link', 'newsletter'.

## `captionTemplate` (type: `string`):

Ready-to-post caption built for every product. Placeholders: {name} {brand} {price} {listPrice} {discount} {rating} {reviewCount} {sold} {warranty} {description} {link} {merchant}. Leave empty to skip caption generation.

## `enrichFromProductPage` (type: `boolean`):

Open each product page to add the exact warranty statement (e.g. 'Garansi resmi 2 tahun'), Blibli's own SEO description, and stock. Costs one extra request per product but is the only way to get the warranty wording - search results do not carry it.

## `imageSize` (type: `string`):

Which image variant to return. 'full' is best for posts.

## `maxItemsPerQuery` (type: `integer`):

Stop after this many qualifying products per search term or category. 0 means no limit (Blibli serves at most 800 per query).

## `maxConcurrency` (type: `integer`):

Parallel link-minting and enrichment requests. Keep low to stay under Blibli's rate limiting.

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

Blibli is behind Cloudflare and throttles sustained traffic from one IP. Apify Residential proxy with country 'ID' is strongly recommended here.

## Actor input object example

```json
{
  "searchTerms": [
    "laptop"
  ],
  "categories": [],
  "sortBy": "bestSelling",
  "minRating": 4,
  "minReviewCount": 10,
  "minSoldCount": 0,
  "minDiscountPercent": 0,
  "officialWarrantyOnly": false,
  "officialStoreOnly": false,
  "topRatedSellerOnly": false,
  "generateShareLink": true,
  "captionTemplate": "{name}\nRp{price} (diskon {discount}, dari Rp{listPrice})\n{rating} bintang - {sold} terjual\n{description}\n{link}",
  "enrichFromProductPage": false,
  "imageSize": "full",
  "maxItemsPerQuery": 50,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Affiliate-ready product records with images, descriptions, links and captions.

# 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 = {
    "searchTerms": [
        "laptop"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zucchini_gopher_m2v/blibli-affiliate-content-generator").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 = { "searchTerms": ["laptop"] }

# Run the Actor and wait for it to finish
run = client.actor("zucchini_gopher_m2v/blibli-affiliate-content-generator").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 '{
  "searchTerms": [
    "laptop"
  ]
}' |
apify call zucchini_gopher_m2v/blibli-affiliate-content-generator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zucchini_gopher_m2v/blibli-affiliate-content-generator"
        }
    }
}

```

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/17IKP4dBGWoeh2V3Q/builds/oeyRd2CspTD2OEhkL/openapi.json
