# Affiliate Egg WordPress Plugin

Affiliate Egg pulls live product data — title, price, image, availability — from online shops straight into WordPress. No API keys, no data feeds: you paste a product link and get a ready-to-use product block.

## Why it works on so many shops

Most stores already publish their product details in a machine-readable form — **LD+JSON** and **microdata** — so Google can show rich results in search. Affiliate Egg reads that same structured data. On top of that, specific shops have their own tuned parsers, and a general parser covers many of the rest.

So "works with almost any shop" isn't a slogan — it's just reading data that's already there for Google to see. Where a shop exposes clean product data, Affiliate Egg can read it.

## What you get

* Product blocks in any post or page via the `[affegg]` shortcode.
* Prices and availability that refresh automatically.
* Your affiliate links applied to every product — set once, per shop.

## Most shops work fine — but a few block access

Most stores are happy to be read. But because Affiliate Egg reads live pages, a few shops limit automated requests — it depends on the store. It's worth knowing up front, so [When a shop blocks access](/getting-data-reliably/blocking) explains what's happening and what helps.

## Two ways to use it

Many people run Affiliate Egg on its own: paste a link, get a product block, done — no learning curve. Others pair it with [Content Egg](https://www.keywordrush.com/contentegg), which adds keyword search, price comparison, more affiliate networks and richer output. [Standalone or with Content Egg?](/getting-started/choosing-your-setup) helps you choose.

## Start here

* [Installation & license](/getting-started/installation)
* [Quick start](/getting-started/quick-start) — your first storefront in three steps

***

Project URL: [www.keywordrush.com/affiliateegg](https://www.keywordrush.com/affiliateegg)

E-mail: <info@keywordrush.com>

Copyright © 2026 by keywordrush.com. All Rights Reserved.&#x20;


# Installation & license

## Requirements

* **PHP 8.0** or higher
* **WordPress 6.0** or higher

## Install the plugin

1. Download the ZIP from your [user panel](https://www.keywordrush.com/panel) (or your license provider).
2. In WordPress, go to **Plugins → Add New → Upload Plugin**.
3. Choose the Affiliate Egg ZIP and click **Install Now**.
4. Activate the plugin from the **Plugins** menu.

## Enter your license key

After activating, enter your license key to activate the plugin and receive updates. You'll find the key in your [user panel](https://www.keywordrush.com/panel) or from your license provider.

## Changelog

See the [release notes](https://www.keywordrush.com/changelog/affiliate-egg/readme.txt).


# Standalone or with Content Egg?

There are two honest ways to use Affiliate Egg, and neither is wrong — it depends on what you're building.

## Affiliate Egg on its own

The appeal is simplicity. You create a storefront, paste a few product links, drop a shortcode into a post, and you have a product block. Prices update on their own, and your affiliate links are applied automatically. There's almost no learning curve.

It does more than single products, too: add several merchants' links for the same item to one storefront, choose a price-comparison template, and you have a self-updating price table. What Affiliate Egg *doesn't* do on its own is **find** those merchants for you or let you **search by keyword** — you paste each link yourself.

This is a good fit if you:

* want to add a handful of products to a post or a small site,
* like the paste-a-link-and-go workflow,
* are happy choosing merchants yourself, rather than having them found and pulled in for you.

If that's you, the rest of this guide is all you need.

## Affiliate Egg with Content Egg

[Content Egg](https://www.keywordrush.com/contentegg) is our larger plugin, and most Affiliate Egg users pair the two. Content Egg becomes the front end; Affiliate Egg is one of the data sources it can read from. Together they add:

* **Keyword search** across products, right in the post editor.
* **Automatic price comparison** — Content Egg gathers many merchants for the same product for you (not just the ones you paste), sorted by price.
* **More networks and feeds** — Amazon and eBay APIs, CSV/XML product feeds (via Content Egg's Feed module), and many affiliate networks, alongside the shops Affiliate Egg reads.
* **Richer output** — structured blocks, comparison tables, and automation.

The trade-off is that there's more to set up and learn. If you're building comparison pages or larger affiliate sites, or want product data from many sources, this is the route — and [Content Egg's own docs](https://ce-docs.keywordrush.com/) cover it in depth.

{% hint style="info" %}
A useful rule of thumb: if a shop offers a **product feed or an API**, Content Egg can use it directly — cleaner, and never blocked. Affiliate Egg is for the shops that offer neither, where reading the page is the only way to get the data. Plenty of people run both together for exactly that reason.
{% endhint %}

## Which should you pick?

| If you want to…                                 | Use                                                |
| ----------------------------------------------- | -------------------------------------------------- |
| Add a few products the simplest way             | Affiliate Egg on its own                           |
| Compare a handful of merchants you add yourself | Affiliate Egg on its own                           |
| Search products by keyword in the editor        | Content Egg + Affiliate Egg                        |
| Compare many merchants, gathered automatically  | Content Egg + Affiliate Egg                        |
| Pull from feeds, APIs, and many networks        | Content Egg (with Affiliate Egg for no-feed shops) |

You can start simple with Affiliate Egg and move up to Content Egg later if you outgrow it.


# Quick start

There are two ways to get products onto a page — pick whichever fits how you like to work.

## Option A — a storefront, then a shortcode

1. Go to **Affiliate Egg → Storefronts → Add storefront**.
2. Paste in one or more **direct product URLs** — the plain product-page links from the shop (not your affiliate links; see below).
3. Save. Affiliate Egg reads each URL and stores the product data — title, price, image.
4. Copy the storefront's shortcode and paste it into any post or page:

```
[affegg id=10]
```

![Adding product URLs to a storefront](/files/3LiL4XvnPWjszPe5qOBO)

Then insert the shortcode into your post — type it, or use the **Add storefront** button in the editor toolbar to pick a storefront and drop it in for you.

![Inserting the storefront's shortcode into a post](/files/aRqKXRZA6htMyT4jjNn0)

## Option B — the Storefront block, all in the editor

{% embed url="<https://www.youtube.com/watch?v=u1yIWgq-OfY>" %}

Prefer to stay in the post editor? Add the **Affiliate Egg Storefront** block, paste your product (or category) URLs straight into it, and Affiliate Egg extracts the products and creates the storefront for you. You get a live preview, and you can switch templates and adjust output settings without leaving the editor.

![Importing product URLs into the Storefront block](/files/8hlmuCL88FA6lVEGJ1p2)

![The block's live product preview in the editor](/files/mqoo1fkLCYROgfHqwgpY)

## A few things that apply either way

* **Use plain product URLs, not your affiliate links.** You'll turn them into affiliate links in one place (next point).
* **Turn on your affiliate links.** When you save a storefront, each shop's domain is added to the **Deeplink** tab automatically. Open it and set your affiliate link for that domain — once per shop, and it applies to every product from it. See [Deeplink settings](/affiliate-links/deeplink).
* **Pull a whole category** instead of a single product by pasting a category URL with this syntax:

```
[import limit=10]https://supershop.com/some-category
```

* **Pick a template** for how products look — see [Templates](/displaying-products/templates).

***

That's the whole loop. Prices and stock refresh on their own ([Price updates](/keeping-products-fresh/priceupdate)); if a shop ever blocks access, see [When a shop blocks access](/getting-data-reliably/blocking).


# Creating a storefront

A **storefront** is a named list of product URLs — Affiliate Egg reads each one, stores the product data (title, price, image, availability), and lets you drop the whole list into a post with a shortcode or the block. It's reusable: show the same storefront in as many posts as you like, and editing it updates every one. A storefront might hold a single product, or a dozen from different shops for a comparison.

For the step-by-step, the [Quick start](/getting-started/quick-start) walks through creating one both ways, with screenshots. This page covers what you can put in a storefront and how to manage them over time.

## What you can add

A storefront accepts direct product URLs and whole categories, and you can mix shops in one storefront to build comparison lists. See [Adding products](/storefronts/adding-products) for the details and the recommended approach.

Affiliate Egg reads a wide range of shops — [Is your shop supported?](/supported-shops-and-custom-parsers/supported-shops) explains how to tell whether yours is one.

## Managing storefronts

All your storefronts live under **Affiliate Egg → Storefronts**, where you can edit or remove them. Editing a storefront updates it wherever it's displayed — change the template or product list once, and every post using it reflects the change.

![The Storefronts screen — all your storefronts in one list](/files/tfV8LWopYA02g6iQ00j7)


# Adding products

A storefront is just a list of URLs. When you save it — or paste URLs into the Storefront block — Affiliate Egg reads each one and stores the product data. There are two kinds of URL you can add, plus one habit that keeps everything reliable.

## The two URL types

**A single product** — the most common, and the most reliable. Paste the plain product-page URL:

```
https://www.adorama.com/canon-eos-r50-mirrorless-camera-18-45-mm/p/car50k
```

**A whole category or listing** — pull several products from a category, listing, or search-results page at once:

```
[import limit=6]https://www.adorama.com/l/Photography/Cameras/Panasonic~Mirrorless-Cameras
```

`limit=6` sets how many products to take from that page.

You can mix both, from different shops, in a single storefront — that's how you build a comparison list. For the same product from several retailers, add one direct URL per shop:

```
https://www.adorama.com/canon-eos-r50-mirrorless-camera-18-45-mm/p/car50k
https://www.target.com/p/canon-eos-r50-rf-s18-45mm-f4-5-6-3mm-is-stm-kit/-/A-88661030
https://www.usa.canon.com/shop/p/eos-r50-rf-s18-45mm-f4-5-6-3-is-stm-lens-kit
```

## Category imports refresh themselves

The two URL types behave differently over time, and it's worth knowing which you're choosing.

A **direct product URL** always points at the same product. When Affiliate Egg re-reads it, only the details change — price and availability — never *which* product it is.

A **category or listing URL** is re-read differently: Affiliate Egg fetches the page again and rebuilds the product set from whatever it lists *now*. This happens on its own schedule — the **Category & listing update interval** in **Affiliate Egg → Settings** (45 days by default). It keeps the list current — new arrivals appear, discontinued items drop off — but it also means the exact products in your storefront can shift over time. That's the trade-off: a listing stays fresh on its own, at the cost of being less predictable than a hand-picked set of URLs.

Want a fixed, curated list that never changes on its own? You have two options: set the **Category & listing update interval** to `0` (never refresh listings), or skip category URLs and add the products you want as direct URLs.

## Use plain URLs, not affiliate links

Add the **clean product URL** — the link you'd see in your browser's address bar on the product page. Don't paste an affiliate or tracking link.

Affiliate Egg applies your affiliate links separately, in one place. When you save a storefront, each shop's domain appears in the **Deeplink** tab, where you set your affiliate link once for the whole domain. See [Deeplink settings](/affiliate-links/deeplink). Adding clean URLs keeps this tidy — and lets you switch affiliate networks later without touching your products.

## Direct URLs are the most reliable

Reach for **direct product URLs** whenever you can:

* They read the exact product you want, every time.
* They make far fewer requests to the shop — which means fewer blocks.

Category and listing pages are convenient for adding a lot at once, but they're more fragile: some shops render their listings with JavaScript, or push back on heavier browsing. If an `[import]` comes back empty or partial, fall back to direct product URLs. See [When a shop blocks access](/getting-data-reliably/blocking).

And go easy — adding a huge batch in one sitting is the quickest way to get temporarily blocked. Add in reasonable chunks.


# Shortcodes

Display a storefront anywhere with the `[affegg]` shortcode. The storefront's **id** is the only thing it needs:

```
[affegg id=10]
```

You'll find the shortcode on the storefront's screen, and there's an **Add storefront** button in the post editor that inserts it for you. You can also skip shortcodes entirely and use the **Affiliate Egg Storefront** block — see [Creating a storefront](/storefronts/storefronts).

## Options

| Attribute  | What it does                                                                                      | Example                                       |
| ---------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| `id`       | The storefront to display (required).                                                             | `[affegg id=10]`                              |
| `limit`    | Show at most this many products.                                                                  | `[affegg id=10 limit=3]`                      |
| `offset`   | Skip the first N products.                                                                        | `[affegg id=10 offset=5 limit=3]`             |
| `next`     | Show the next N products — repeat to spread a storefront down a post.                             | `[affegg id=10 next=3]`                       |
| `random`   | Show N random products.                                                                           | `[affegg id=10 random=3]`                     |
| `order`    | Sort by a field, optionally reversed.                                                             | `[affegg id=10 order="price desc"]`           |
| `template` | Use a specific template instead of the default (see [Templates](/displaying-products/templates)). | `[affegg id=10 template=cards]`               |
| `hide`     | Hide one or more fields.                                                                          | `[affegg id=10 hide="description,domain"]`    |
| `btn_text` | Custom button text (supports placeholders — see below).                                           | `[affegg id=10 btn_text="Buy at %MERCHANT%"]` |

## Splitting a storefront with `next`

`next` lets you place a storefront's products at different points in an article. This shows the first 3:

```
[affegg id=10 next=3]
```

Add the same shortcode again lower in the post and it shows the **next** 3, and so on.

## Sorting with `order`

Sort by any of these fields: `title`, `price`, `manufacturer`, `in_stock`, `create_date`, `last_update`, `last_in_stock`, `shop_id`.

```
[affegg id=10 order=price]
```

Add `desc` for reverse order, or use `rand` for a random order:

```
[affegg id=10 order="price desc"]
[affegg id=10 order=rand]
```

## Hiding fields with `hide`

Hide one or more fields from the output — handy for a cleaner or more compact block. Pass a comma-separated list:

```
[affegg id=5 hide="description,domain"]
```

Fields you can hide: `description`, `price`, `oldprice`, `rating`, `brand`, `stock`, `domain`, `updated`, `disclaimer`.

## Custom button text with `btn_text`

Override the button text for a single block. You can include placeholders that fill in per product:

* `%MERCHANT%` — the merchant / shop name
* `%DOMAIN%` — the shop's domain
* `%PRICE%` — the product's price

```
[affegg id=5 btn_text="Buy at %MERCHANT%"]
```

To change the button text everywhere at once instead, use the setting in [Frontend text & wording](/displaying-products/frontend-text).


# Templates

A template controls how your products look on the page — a grid of cards, a single detailed product, a price-comparison list, and so on.

## Choosing a template

* **On the storefront** — pick a template on the storefront edit screen, or in the Storefront block's settings.
* **Per placement** — override it for a single shortcode with the `template` attribute:

```
[affegg id=10 template=cards]
```

Use a template's **id** — the short name in parentheses in the list below (e.g. `cards`). The full `egg_`-prefixed name shown on the storefront screen (e.g. `egg_cards`) works too.

## Built-in templates

* **Cards grid** (`cards`) — products shown as cards in a responsive grid.
* **Product card** (`item`) — one product in detail: image, price, features and description.
* **Price comparison** (`price_compare`) — the same product across several merchants, sorted by price.
* **Product box** (`product_box`) — a compact single-product box.
* **Inline pick** (`pick`) — a small inline recommendation, handy mid-article.
* **Top list** (`top_list`) — products shown as a list.

A set of older **legacy** templates — Slider (`carousel`), Grid (`grid_3cols`), List (`list`), Masonry (`masonry_3cols`), Tile (`tile_3cols`), and the full / short price-comparison layouts (`price_comparison_full` / `price_comparison_short`) — is still available for existing sites; they appear after the current ones in the picker.

## What they look like

**Cards grid**

![Cards grid template](/files/GDm8soP6gnDvLu7mSvK6)

**Top list**

![Top list template](/files/bYtZgTesmd6xGxBYXFMT)

**Product card**

![Product card template](/files/lx0jmYOAYE10jhyze2Ql)

**Inline pick**

![Inline pick template](/files/uotr5cvEnj3XEcjpHppk)

**Price comparison**

![Price comparison template](/files/JYk4dO207CcIAvkplsDN)

Want a layout of your own? See [Custom output templates](/displaying-products/customtemplates).


# Frontend text & wording

You can change the words your product blocks show — the button, the disclaimer, and the template labels — right in the plugin settings. No separate translation plugin needed. These live in **Affiliate Egg → Settings**.

![Frontend-related settings in Affiliate Egg → Settings](/files/XWvd62sP7flEY4rb07no)

## Buy button text

Set a custom label for the buy button. Leave it empty to use the default ("Buy Now").

You can include placeholders that fill in per product:

* `%MERCHANT%` — the merchant / shop name
* `%DOMAIN%` — the shop's domain
* `%PRICE%` — the current price

For example, `Buy at %MERCHANT%` becomes "Buy at Amazon", "Buy at eBay", and so on. There's also a **buy-button color** setting alongside it.

To change the button text for just one block instead of everywhere, use the `btn_text` shortcode attribute — see [Shortcodes](/displaying-products/shortcodes).

## Merchant names

By default a product shows its merchant by shop name, falling back to the domain (e.g. `bicyclewarehouse.com`). To show a tidier name — "Amazon" instead of "amazon.com", or your own label — go to **Affiliate Egg → Settings → Merchant Names** and set a name for each shop domain.

The domains you import from are listed automatically, so you just fill in the names you want. A name you set applies in two places: the **`%MERCHANT%` placeholder** (for example, the buy button) and the **merchant label on the modern product templates**. Domains you leave blank are shown as before.

## Price disclaimer

A short line shown with the "last updated" time below products in the modern templates — by default, *"Product prices and availability are subject to change."* Leave it empty to hide the disclaimer.

{% hint style="warning" %}
If you promote Amazon products, the Amazon Associates program requires specific disclaimer wording — check the Amazon Associates Operating Agreement.
{% endhint %}

## Frontend texts

Override the other words shown in the modern product templates — labels like "Description", "Features", and "See more". Leave a field empty to keep the default. (Defaults are also translatable through your site's language files if you'd rather do it that way.)


# Custom output templates

You can create your own templates for your storefronts. Don't edit the built-in templates — your changes would be lost when the plugin updates.

{% hint style="info" %}
Custom templates are PHP files — creating one takes some basic PHP knowledge. The easiest start is to copy a default template and adjust it.
{% endhint %}

First, create the following directory:

`wp-content/affegg-templates`

To get started quickly, you can copy one of the default templates as a base.

Default templates are located in `wp-content/plugins/affiliate-egg/templates`.

Template files must be named with the prefix `egg_`.

Each template file must begin with a PHP comment that defines its name, for example:

```php
/*
Name: Simple
*/
```

{% hint style="warning" %}
Make sure your editor uses UTF-8 encoding when editing template files.
{% endhint %}

## Using the built-in styles

Affiliate Egg's CSS isn't loaded just because your template renders — a template pulls in its own styles by calling one of these on the **first line**:

```php
<?php $this->enqueueModernStyle(); ?>   // modern styling (affegg-modern.css)
<?php $this->enqueueStyle(); ?>         // legacy styling (Bootstrap 3 + products.css)
```

If you **copy a default template as a base**, that call is already there — so the built-in styling loads and you can just tweak the markup and CSS classes. Keep the line if you want to build on the default look and only customise the layout.

If you **start from scratch** and leave both calls out, no plugin CSS is loaded, and your template is styled entirely by your theme or your own CSS — handy when you want full control.


# Deeplink settings

Deeplinks turn the plain product URLs in your storefronts into **trackable affiliate links** — so your affiliate network records the clicks and pays your commissions. This is exactly why you add clean product URLs to a storefront rather than your affiliate links: the affiliate part is applied here, in one place, per shop.

## The Deeplink tab

The **Deeplink** tab is a list of **domain → affiliate link** pairs. When you save a storefront, every shop domain it contains is added here automatically, with an empty deeplink. You fill in your affiliate link (or ID) for each domain once, and it applies to every product from that domain — across all your storefronts. You can also add a domain manually at any time.

So the flow is simple: add clean product URLs → the shop domains appear in the Deeplink tab → set your affiliate link for each.

![The Deeplink tab](/files/uEHR65lw9NT70ahiO0s4)

{% hint style="success" %}
**AI Helper: generate your Deeplink automatically**

You can use our specialized GPT assistant to build a correct Deeplink template.

👉 [Open Deeplink Setup GPT](https://chatgpt.com/g/g-6911df85b340819188ccf04452586c6e-deeplink-setup-for-content-egg)

1. Paste a sample affiliate link from your network dashboard.
2. The assistant detects the format and builds a Deeplink template for Affiliate Egg.
3. Copy the suggested template into your Deeplink settings.
   {% endhint %}

Affiliate networks build links in one of two ways, and Affiliate Egg supports both.

## 1. Deeplink-based affiliate links

Many networks (AWIN, ShareASale, CJ, Admitad…) use **deeplink redirects** — the link routes the visitor through the network's servers for tracking, then on to the product page.

A deeplink has two parts: the network's tracking script, and the **encoded product URL**:

```
https://ad.admitad.com/g/383ee6455773fd57830a7d95a12660/?ulp=https%3A%2F%2Fwww.lightinthebox.com%2Fen%2Fp%2Fkids-girls-rainbow-dress-purple_p7923807.html
```

To set it up:

1. Generate a sample affiliate link for any **product page** (not the homepage) from your network.
2. Find the product-URL part inside it.
3. Replace that part with the placeholder `{{url_encoded}}`.
4. Paste the result into the domain's Deeplink field.

**Template:**

```
https://ad.admitad.com/g/383ee6455773fd57830a7d95a12660/?ulp={{url_encoded}}
```

Affiliate Egg substitutes `{{url_encoded}}` with each product's encoded URL when it builds links.

{% hint style="info" %}
Use `{{url}}` instead if the network does **not** require URL encoding.
{% endhint %}

## 2. Direct affiliate links with an ID parameter

Some programs (like Amazon) don't redirect — they just append your affiliate ID to the product URL:

```
https://www.amazon.com/dp/B07XKF5RM3/?tag=yourtag-20
```

Here `tag` is the parameter name and `yourtag-20` is your tracking ID (both vary by network).

To set it up, enter just the **parameter and value** in the domain's field:

**✅ Correct**

* `tag=yourtag-20`
* `aff_id=abc123`

**❌ Incorrect**

* `?tag=yourtag-20`
* `&tag=yourtag-20`
* `yourtag-20`
* `tag` with no value

{% hint style="warning" %}
Don't include `?`, `&`, or any prefix — Affiliate Egg formats the final URL for you.
{% endhint %}

## Test your links

After setting a deeplink or affiliate ID, open a few product links from your storefront and confirm they redirect correctly and that the clicks show up in your affiliate dashboard. If tracking isn't working, re-check the template and the encoding format.


# Price updates

Affiliate Egg keeps your stored product data — **price and availability** — in sync with the shops automatically, so the numbers on your site stay current without you touching them.

## How it works

Updates run on **WordPress Cron**. Set the cadence with the **Product update interval** in **Affiliate Egg → Settings** — how often each product's price and stock is refreshed, in seconds (30 days by default; set it to `0` to never update). Pick an interval that suits how fast your prices actually change.

Each update re-reads the product from the shop, just like when you first added it — so the same reliability notes apply:

* **Don't update too often.** Frequent updates mean more requests to each shop, which raises the chance of being [blocked](/getting-data-reliably/blocking). For most sites, a daily (or slower) interval is plenty.
* If a product can't be read during an update — the shop is down or blocking — it simply keeps its last known values and tries again next time.

## Category lists refresh too

Products added from a **category or listing URL** refresh on their own schedule — the **Category & listing update interval** — but with a twist: Affiliate Egg re-reads the listing page and rebuilds the set, so the list stays current while the *exact* products can change over time. See [Category imports refresh themselves](/storefronts/adding-products#category-imports-refresh-themselves).

## If updates don't seem to run

WordPress Cron only fires when your site gets visitors, so on a low-traffic site updates can lag. If that's a problem, ask your host to set up a **real server cron job** that triggers WordPress on a schedule. It's a standard WordPress setup, and it makes updates reliable no matter how much traffic you get.


# Autoblogging

Autoblogging creates posts for you automatically. You point it at a shop's catalog page — ideally one that lists **new products**, like a "New arrivals" section — and Affiliate Egg checks it on a schedule and publishes a post for each new product (or batch of products) it finds. It's a hands-off way to publish fresh offers as they appear.

{% embed url="<https://www.youtube.com/watch?v=yi45evBGxjY>" %}

## Setting up a task

Go to **Affiliate Egg → Autoblog → Add Autoblog** and configure:

* **Url of catalog** — the shop catalog or category URL to watch. Choose one that updates with new goods (for example, a "new products" page).
* **Handle products** — how many products to process on each check.
* **Products in one post** — how many products to merge into a single post (use 1 for one product per post).
* **Post status** — publish immediately, or save as a **draft** to review first.
* **Author** — the WordPress user the posts are published under.
* **Category** — the category new posts go into.
* **Template for title** — the post-title pattern. You can use these tags: `%PRODUCT.TITLE%`, `%PRODUCT.PRICE%`, `%PRODUCT.OLD_PRICE%`, `%PRODUCT.CURRENCY%`, `%PRODUCT.MANUFACTURER%`.
* **Template for storefronts** — the output template the products use inside the post.
* **Duplicate check** — how Affiliate Egg avoids posting the same product twice: **By URL** (default), or **Determined by parser** for catalogs that change a product's URL over time.
* **Task status** — **Works** (running) or **Stopped** (paused).

## How it runs

Tasks run on **WordPress Cron** — the same schedule that powers [price updates](/keeping-products-fresh/priceupdate) — so they depend on your site getting traffic (or a real server cron). Each run makes a request to the shop, so the usual [blocking](/getting-data-reliably/blocking) notes apply: point tasks at catalogs that don't mind being read, and don't run too many too aggressively.


# When a shop blocks access

Most shops work fine. Plenty of stores are perfectly happy to be read — you paste a product link and it just works. Whether you'll ever run into a block depends entirely on the store; it's a possibility to be aware of, not something that happens everywhere.

{% hint style="info" %}
Affiliate Egg reads live pages because these shops offer no API and no product feed to pull from. If a shop **does** publish a product feed, importing it with [Content Egg's Feed module](https://ce-docs.keywordrush.com/modules/feed-modules) is cleaner and never gets blocked — reach for that first when it's an option. Affiliate Egg is for everything else.
{% endhint %}

Here's what's going on: Affiliate Egg makes a real request to the shop each time it searches for a product or refreshes a price, much like a browser. Most shops don't mind. Some, though, run anti-bot protection or limit how many requests one visitor can make — cross that line and the shop starts refusing requests, usually with a **503** or **403** error.

## The kinds of blocks you might hit

* **Rate limits.** Sending too many requests too quickly — from bulk-adding products or frequent price updates — can get your server's IP temporarily blocked. These usually clear on their own within about 24 hours.
* **Anti-bot walls.** Some shops (often behind Cloudflare and similar) challenge automated visitors with captchas or JavaScript checks. These don't clear by waiting.
* **A few shops won't cooperate at all.** A small number are locked down tightly enough that reliable, unattended reading isn't realistic.

None of this is the norm — but when it happens, here's what to do.

## What actually helps

* [x] **Use direct product URLs**, not keyword search — the single biggest improvement. Far fewer requests, and none of the fragile search pages.
* [x] **Go slow.** Add products a few at a time, and avoid aggressive price-update schedules.
* [x] **Ask the shop to whitelist your server's IP.** You're sending them sales, so many merchants are happy to — and asking permission is good form either way. Your host can tell you the server's IP address.
* [x] **Use a scraping service** for the harder cases. Your requests route through the service's rotating IPs (and can render JavaScript), which gets past most rate limits and many anti-bot walls. It's paid, but it's what makes difficult shops workable. See [Scraping services](/getting-data-reliably/extractor-settings).
* [x] **Set custom cookies** for shops that need a region or session cookie to show prices. See [Custom cookies](/getting-data-reliably/customcookies).

## What won't help

* **Waiting out an anti-bot wall.** Captchas and JavaScript challenges don't clear on a timer — you need a scraping service or a whitelisted IP.
* **A custom parser.** A parser is for shops whose data *can't be read* (see [Is your shop supported?](/supported-shops-and-custom-parsers/supported-shops)); it doesn't change whether a shop lets you in. If a shop blocks you, the fix is a scraping service or a whitelist, not a parser.


# Scraping services

The plugin integrates third-party scraping services to help bypass IP restrictions or blocks:

* [Scrapingdog](https://www.keywordrush.com/go/scrapingdog)
* Scrapeowl.com
* [Scraperapi](https://keywordrush.com/go/scraperapi)
* Crawlbase
* Decodo

{% hint style="warning" %}
These services are paid, but each typically includes about **1,000 free requests** per month.
{% endhint %}

### How to Route Requests Through a Scraping Service

#### 1. Add Your API Keys

1. In your WordPress admin, go to:\
   **Affiliate Egg → Settings → Extractor Settings**
2. Enter the API key for each provider you want to use.
3. Save changes.

You can enable **one or multiple providers** at the same time.\
Which provider is used for each URL is controlled by **routing rules** (see below).

<figure><img src="/files/t1wQfVoi7jjOdJwBculW" alt="" width="563"><figcaption></figcaption></figure>

#### 2. Configure Routing Rules

Routing rules tell the plugin **which scraping service** to use for specific domains or URL patterns.

1. In **Affiliate Egg → Settings → Extractor Settings**, scroll to the **Routing rules** table.
2. Click **Add rule**.
3. Fill in the fields:
   * **Pattern** – the domain or URL pattern to match.
   * **Provider** – select the scraping service to use.
   * **Extra params (optional)** – additional query parameters for the provider API.
4. Save your changes.

Whenever a URL matches a rule, that request will be sent through the selected provider.

<figure><img src="/files/yTgd8Kft8y7mhocnoWrt" alt=""><figcaption></figcaption></figure>

**Pattern Examples**

You can **match domains** or more specific URL paths. Some common patterns:

* `example.com`\
  Matches the domain example.com. This is the **most common pattern** and is usually what you’ll use when creating a rule for a specific site.
* `*.example.com`\
  Matches any subdomain, e.g.:
  * `shop.example.com`
  * `de.example.com`
* `example.com/path/*`\
  Matches only URLs that start with `/path/`, e.g.:
  * `https://example.com/path/product-123`
  * `https://example.com/path/category/`

**Additional Parameters**

Additional parameters are simply added to the provider’s API request as query parameters.

* Each provider has its **own parameter names and supported values**.
* Use these to enable features like geo-targeting, premium proxies, or JavaScript rendering.

Below are examples for the providers currently supported.

**ScraperAPI Parameters**

You can pass these in the **Extra params** field:

* `country_code=us`\
  Use US-based proxies (geo-targeting).
* `premium=true`\
  Use premium residential/mobile IPs.
* `ultra_premium=true`\
  Use the advanced bypass mechanism for harder sites.
* `render=true`\
  Enable JavaScript rendering for dynamic pages.

**Scrapingdog Parameters**

You can pass these in the **Extra params** field:

* `country=de`\
  Use German IPs (geo-targeting).
* `premium=true`\
  Use premium residential proxies.
* `dynamic=true`\
  Enable JavaScript rendering for dynamic pages.

**Combining Parameters**

You can combine multiple parameters using `&` just like a normal query string.

Example:

```
country_code=us&premium=true&render=true
```

Recommended settings for mercadolivre.com.br via Decodo:

```
proxy_pool=premium&headless=html&geo=Brazil&locale=pt-br
```

### Rule Priority and Order

Routing rules are evaluated **from top to bottom**:

1. The plugin checks the first rule.
2. If the URL matches the rule pattern, that rule’s provider (and parameters) are used.
3. If it doesn’t match, it moves to the next rule, and so on.

The **first matching rule wins**.

**Tips:**

* Put **more specific patterns (e.g. `example.com/path/*`) above** more general ones (e.g. `example.com`).
* If a URL does not match any rule, the request will be made **without a scraping provider**.

#### Custom Parameters for Scraping Services (Programmatically)

```php
// Add premium parameter to ScrapingDog requests
add_filter('affegg_parse_url_scrapingdog', function($url) {
    return add_query_arg('premium', 'true', $url);
}, 10, 1);

// Add country parameter to ScrapingDog requests
add_filter('affegg_parse_url_scrapingdog', function($url) {
    return add_query_arg('country', 'au', $url);
}, 10, 1);

// Add country_code parameter to ScraperAPI requests
add_filter('affegg_parse_url_scraperapi', function($url) {
    return add_query_arg('country_code', 'de', $url);
}, 10, 1);
```


# Custom cookies

Some multilingual sites use IP addresses or cookies to detect a user's language and currency. As a result, the currency of products parsed by Affiliate Egg may depend on your server's IP address. This is common when your server is hosted in a different country.

These sites require additional configuration if you want to change the currency.

### How to configure currency for a multi-currency site

1. Open Firefox. Go to the shop and select your preferred language, country, and currency.

![](/files/-M5WIrQJ4DnCSfaHdwvS)

2. Press `Ctrl+Shift+E` to open the Firefox DevTools Network panel.
3. Press `F5` to reload the page.
4. Click the **Network** tab and select the top URL in the left panel. In the right panel, find **Headers** → **Request Headers** → **Cookie**. Click the cookie value and copy the entire string.
5. Go to `Affiliate Egg` → `Settings` → `Custom Cookies` and save the cookies for the shop you want to configure.

![](/files/-M5WJeWxw0IohZn17bs7)


# Is your shop supported?

Short answer: quite possibly — even if you've never seen it on a list. Here's why, and how to check in a minute.

## Why so many shops work

Most online stores publish their product details in a structured, machine-readable form — **LD+JSON** and **microdata** — so search engines like Google can show the price, rating and availability in results. Affiliate Egg reads that same data. If a shop has done the work to look good in Google — and most have — there's a good chance Affiliate Egg can read it too.

On top of that:

* **Specific shops** have their own tuned parsers, for stores that need special handling.
* **A general parser** reads the structured data directly and covers many of the rest.

So "supported" isn't really a fixed list — it comes down to whether a shop exposes clean product data. Many do.

## How to check your shop

The fastest way is to just try it:

1. Create a storefront.
2. Paste a **direct product URL** from the shop.
3. If Affiliate Egg pulls in the title, price and image, you're set.

If nothing comes back, it's one of two different problems — and each has a different fix.

## If it doesn't work

* **"No product data found."** Affiliate Egg reached the page but couldn't read product details from it — the shop probably doesn't expose structured data in a form it recognizes. This is exactly what a [custom parser](/supported-shops-and-custom-parsers/customparsers) is for: one written for that specific shop so its products read reliably.
* **"Blocked by the site" (503 / 403).** That isn't a support problem — the shop is refusing automated requests. See [When a shop blocks access](/getting-data-reliably/blocking).

{% hint style="info" %}
A custom parser solves *reading* a shop, not *getting past a block* — and a scraping service is the reverse. If you're not sure which you're hitting, the on-screen message tells you: "no product data" means reading, "blocked" means access.
{% endhint %}


# Ordering a custom parser

## Ordering a custom parser

Affiliate Egg reads most shops automatically — there's no fixed list of supported stores (see [Is your shop supported?](/supported-shops-and-custom-parsers/supported-shops)). But a custom parser is still worth ordering in a few cases:

* the shop's product pages carry **no structured data** — no LD+JSON or microdata for Affiliate Egg to read;
* you want to import from **search or category pages that load their results with JavaScript**, where the product links aren't in the page's initial HTML;
* you need **richer product data** — extra attributes or specifications the generic reader doesn't pick up.

If any of these apply, we can build a parser for you.

**Cost** — $25 per parser. Each store needs its own parser, and you can use it on any of your sites.

**How it works**

1. **Send your list.** [Email us](https://www.keywordrush.com/contact) the stores you need.
2. **Get an invoice.** We review the list and send you an invoice.
3. **Receive the parsers.** They usually take 1–2 days to build.

**Installing them**

* Copy the parser files to `/wp-content/affegg-parsers/` on your server.
* From there they work exactly like the built-in parsers.

**Guarantee** — every custom parser comes with a 6-month guarantee. If it needs fixing in that time, we'll adjust it for free.

## Write your own parser

Prefer to build one yourself? Here's what's involved.

1. **Skills needed.** You'll need PHP and XPath.
2. **Where parsers live.** Put your custom parsers in:

   ```
   /wp-content/affegg-parsers/
   ```
3. **A working example.** Study the built-in parsers for reference:

   ```
   /wp-content/plugins/affiliate-egg/application/shop/parsers/
   ```
4. **File naming.** The filename must match the class name inside the parser.
5. **File header.** Start the file with a header block:

   ```php
   /*
     URI: https://www.adidas.fr
     SEARCH URI: https://www.adidas.fr/search?q=%KEYWORD%
    */
   ```
6. **Required methods.** Each parser class must implement:

   ```php
   parseCatalog();
   parseTitle();
   parseDescription();
   parsePrice();
   parseImg();
   parseImgLarge();
   parseOldPrice();
   parseManufacturer();
   parseExtra();
   isInStock();
   ```
7. **Extra data.** Use `parseExtra()` to capture anything beyond the standard fields.


# Content Egg integration

[Content Egg](https://www.keywordrush.com/contentegg) is our larger affiliate plugin, and Affiliate Egg plugs into it as a data source. If you already use Content Egg — or want its extra features — you can pull the shops Affiliate Egg reads straight into Content Egg's editor.

## What you get

Inside Content Egg, a connected Affiliate Egg store works like any other module. That gives you:

* **Keyword search** for the shop's products, right in the post editor.
* Its offers in Content Egg's **price comparison**, next to your other merchants and networks.
* Content Egg's **blocks, templates, and automation**.

Content Egg reads the products through Affiliate Egg, so you get Content Egg's front end and features on top.

![Searching a connected store by keyword in the Content Egg editor](/files/Y5qaYVCktKX9EzP5QYRn)

## How to connect

You connect a store from Content Egg's side: on its **Modules** page, click **Connect a store** and enter the shop's domain (with an optional keyword search URL). The full walkthrough is in the Content Egg docs:

![Connecting a store as a Content Egg module](/files/wICrsOcAANsd7VqdsL4c)

{% hint style="success" %}
👉 [Affiliate Egg integration — Content Egg docs](https://ce-docs.keywordrush.com/modules/affiliate-egg-integration)
{% endhint %}

Not sure which setup is right for you? See [Standalone or with Content Egg?](/getting-started/choosing-your-setup).


# Keeping the plugin updated

Once your license is active, Affiliate Egg checks for new versions and updates like any other plugin — you'll see the update notice on the WordPress **Plugins** screen and can update with one click.

{% hint style="success" %}
Automatic updates need an active update subscription. [Check yours](https://www.keywordrush.com/panel) if updates stop appearing.
{% endhint %}

![The Affiliate Egg update notice on the WordPress Plugins screen](/files/MVWIxMUS38YIKA8MpuOF)

## If your subscription has expired

The plugin keeps working, but it stops receiving new versions. Renew in your [user panel](https://www.keywordrush.com/panel) to turn updates back on.

## Update manually

You can also update by hand at any time: download the latest ZIP from your [user panel](https://www.keywordrush.com/panel), then upload it the same way you installed the plugin.


# Troubleshooting

Most issues fall into a handful of buckets. Here's what each usually means and where to fix it.

| Problem                                     | What's happening                                                    | What to do                                                                                                                                                                                                |
| ------------------------------------------- | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **"Blocked by the site" (503 / 403)**       | The shop is refusing automated requests.                            | Enable a scraping service, slow down, or ask the shop to whitelist your IP — see [When a shop blocks access](/getting-data-reliably/blocking).                                                            |
| **"No product data found"**                 | The plugin reached the page but couldn't read product data from it. | The shop may need a custom parser — see [Is your shop supported?](/supported-shops-and-custom-parsers/supported-shops) and [Ordering a custom parser](/supported-shops-and-custom-parsers/customparsers). |
| **A category import is empty or partial**   | The listing is JavaScript-rendered, or the shop pushed back.        | Use direct product URLs, or a scraping service — see [Adding products](/storefronts/adding-products).                                                                                                     |
| **Prices or stock aren't updating**         | WordPress Cron isn't firing (low traffic), or the interval is long. | Check the update interval and set up a real server cron — see [Price updates](/keeping-products-fresh/priceupdate).                                                                                       |
| **Wrong currency or region**                | The shop chooses currency by IP address.                            | Set custom cookies for the shop — see [Custom cookies](/getting-data-reliably/customcookies).                                                                                                             |
| **Links aren't affiliate links**            | No deeplink is set for that domain.                                 | Set your affiliate link in the Deeplink tab — see [Deeplink settings](/affiliate-links/deeplink).                                                                                                         |
| **Updates stopped appearing**               | Your update subscription has expired.                               | Renew it — see [Keeping the plugin updated](/maintenance-and-help/pluginupdate).                                                                                                                          |
| **Plugin won't activate, or shows no data** | The license key isn't entered or is inactive.                       | Enter your license key — see [Installation & license](/getting-started/installation).                                                                                                                     |

Still stuck? [Contact us](https://www.keywordrush.com/contact).


# FAQ

**Which shops can I use?**

Almost any online store. Affiliate Egg reads the structured product data most shops already publish for Google, plus dedicated and general parsers for the rest. The quickest test is to paste a product URL and see — [Is your shop supported?](/supported-shops-and-custom-parsers/supported-shops)

**Do prices update automatically?**

Yes. Price and availability refresh on a schedule you set, using WordPress Cron. See [Price updates](/keeping-products-fresh/priceupdate).

**Should I use Affiliate Egg on its own or with Content Egg?**

Standalone is the simplest — paste a link, get a product block. Content Egg adds keyword search, price comparison and richer output. See [Standalone or with Content Egg?](/getting-started/choosing-your-setup).

**How do affiliate links work?**

You add plain product URLs, then set your affiliate link once per shop in the Deeplink tab — it's applied to every product from that shop. See [Deeplink settings](/affiliate-links/deeplink).

**A shop keeps getting blocked. What can I do?**

Some shops limit automated requests. Use direct product URLs, slow down, enable a scraping service, or ask the shop to whitelist your server's IP. See [When a shop blocks access](/getting-data-reliably/blocking).

**My shop shows "no product data."**

The page has no data the plugin can read — the shop may need a custom parser. We can build one, or you can. See [Ordering a custom parser](/supported-shops-and-custom-parsers/customparsers).

**Can I use Amazon?**

You can, but Amazon blocks scrapers aggressively. If you promote Amazon, Content Egg's Amazon module uses Amazon's official API, which is faster and more reliable than reading pages.

**Can I change how products look, or their wording?**

Yes — pick a [template](/displaying-products/templates) (or create your own), and edit the button text, disclaimer and labels in [Frontend text & wording](/displaying-products/frontend-text).


