# Content Egg WP Plugin

All-in-one WordPress plugin for affiliate marketing, price comparison, and product content — with 30+ networks, product blocks, and automatic price updates.

[**Content Egg**](https://www.keywordrush.com/contentegg) is an all-in-one WordPress plugin for **affiliate marketing, price comparison, and product content**. It connects to 30+ affiliate networks and marketplaces, pulls live product data — prices, offers, ratings, images, and coupons — and keeps it up to date automatically. You display it with product blocks, comparison tables, price-history charts, and Egg Blocks built for how Google ranks and AI search cites.

{% hint style="info" %}
🛒 **Get the plugin** → [**keywordrush.com/contentegg**](https://www.keywordrush.com/contentegg)

**New here?** Start with [Installation & Licensing](/getting-started/installation), then learn [how to add products](/set-up-products/how-to-add-products).
{% endhint %}

## Start here

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>🧩 Install &#x26; activate</strong></td><td>Set up Content Egg and enter your license.</td><td><a href="/pages/-M4dc6pAGdVBrCQByEeC">/pages/-M4dc6pAGdVBrCQByEeC</a></td></tr><tr><td><strong>📦 Add your first products</strong></td><td>Search, import, and attach products to a post.</td><td><a href="/pages/-MTUcxuksZyTSGfR4hj0">/pages/-MTUcxuksZyTSGfR4hj0</a></td></tr><tr><td><strong>🖥️ How content is displayed</strong></td><td>Blocks, shortcodes, and where products render.</td><td><a href="/pages/-MTUeqMBxUPDkLFSZ_Op">/pages/-MTUeqMBxUPDkLFSZ_Op</a></td></tr></tbody></table>

## Core features

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>🔌 Affiliate &#x26; data modules</strong></td><td>30+ networks, plus feed, coupon, and content sources.</td><td><a href="/pages/-MTRM2JWP8a40N4lcv1N">/pages/-MTRM2JWP8a40N4lcv1N</a></td></tr><tr><td><strong>⚡ Import tools</strong></td><td>Search, bulk, feed, and auto import.</td><td><a href="/pages/sefYoqfDfl8dexmli3yy">/pages/sefYoqfDfl8dexmli3yy</a></td></tr><tr><td><strong>🥚 Egg Blocks</strong></td><td>Editorial blocks built for E-E-A-T and AI search.</td><td><a href="/pages/aEmOOqjjha2fYGaGxBsP">/pages/aEmOOqjjha2fYGaGxBsP</a></td></tr><tr><td><strong>🧱 Gutenberg blocks &#x26; shortcodes</strong></td><td>Place product blocks anywhere on a page.</td><td><a href="/pages/VOMCNZPeKT3nqRH7D81e">/pages/VOMCNZPeKT3nqRH7D81e</a></td></tr><tr><td><strong>🪄 AI content</strong></td><td>Generate content with OpenAI, Claude, or OpenRouter.</td><td><a href="/pages/E5SdMGtB0aMWkwruME2g">/pages/E5SdMGtB0aMWkwruME2g</a></td></tr><tr><td><strong>🔄 Price comparison &#x26; updates</strong></td><td>Automatic price sync, history charts, and drop alerts.</td><td><a href="/pages/-MTVce65orqxiegETLCa">/pages/-MTVce65orqxiegETLCa</a></td></tr></tbody></table>

## Integrations & customization

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>🛍️ WooCommerce</strong></td><td>Sync products and offers into WooCommerce.</td><td><a href="/pages/-MTVRmuqSSSt1Up7qHXE">/pages/-MTVRmuqSSSt1Up7qHXE</a></td></tr><tr><td><strong>🔗 Integrations</strong></td><td>Affiliate Egg, Cashback Tracker, and more.</td><td><a href="/pages/-MTW1Xmf5n36G3ayqCsk">/pages/-MTW1Xmf5n36G3ayqCsk</a></td></tr><tr><td><strong>🎨 Custom templates</strong></td><td>Design your own product layouts.</td><td><a href="/pages/LZHKpJZVvdSvto4fdt91">/pages/LZHKpJZVvdSvto4fdt91</a></td></tr><tr><td><strong>👩‍💻 For developers</strong></td><td>Hooks, REST API, and code snippets.</td><td><a href="/pages/-M4jfyhSe9D7FkjBc3Ob">/pages/-M4jfyhSe9D7FkjBc3Ob</a></td></tr></tbody></table>

***

🛒 **Get the plugin** → [keywordrush.com/contentegg](https://www.keywordrush.com/contentegg)

Need help? Email <info@keywordrush.com>.

*Copyright © 2026 by keywordrush.com. All Rights Reserved.*


# Installation & Licensing

Content Egg Pro – Installation & Licensing Guide

### Minimum Requirements

Before installing, ensure your environment meets the following requirements:

* **PHP**: Version 8.0 or higher
* **WordPress**: Version 6.9 or higher

### Installation

#### Step 1: Download the Plugin

1. Log in to your [**User Panel**](https://www.keywordrush.com/panel).
2. Download the **ZIP archive** containing the plugin (e.g., `content-egg.zip`).

#### Step 2: Upload to WordPress

1. In your **WordPress Admin Dashboard**, go to:\
   `Plugins > Add New > Upload Plugin`
2. Click **Choose File** and select the downloaded file (`content-egg.zip`).
3. Click **Install Now**.

{% hint style="warning" %}
The plugin must remain in **ZIP format**. If your system automatically extracts it, re-zip the folder manually or disable auto-unzip.
{% endhint %}

#### Step 3: Activate the Plugin

1. Wait for the installation to finish.
2. Click **Activate** once the process completes.

<figure><img src="/files/0GMebJCucIv5diqx6D7l" alt=""><figcaption></figcaption></figure>

### Upgrading from the Free Version

If you are currently using **Content Egg Free** and want to upgrade to **Content Egg Pro**:

1. **Deactivate and delete** the Free version.\
   \&#xNAN;*Alternatively, you can install the Pro version over the Free one without deleting it first.*
2. Download and install **Content Egg Pro** following the steps in the Installation section.

{% hint style="success" %}
You will not lose any existing products or settings during the upgrade.
{% endhint %}

### Licensing

#### Activating Your License

1. After activation, you’ll be redirected to the **License Page** (or access it later via the WordPress sidebar under **Content Egg**).
2. Enter your **License Key** (available in your [User Panel](https://www.keywordrush.com/panel)).
3. Click **Save Changes** to complete activation.

✅ You’re now ready to start using **Content Egg Pro**!

#### Using Your License on a New Domain

If you need to transfer your license to another website:

**On the current domain:**

1. Deactivate and **delete** the plugin.
2. Revoke your license in the [**User Panel**](https://www.keywordrush.com/panel).

**On the new domain:**

1. Install the plugin again by following the steps in the **Installation** section.
2. Enter and activate your license key in the plugin settings.


# Quickstart

From an empty install to your first monetized page — the whole Content Egg workflow in four steps.

Content Egg does a lot, but it always works in the same three stages: **Connect** a product source, **Publish** those products into your pages, and **Scale** when you're ready. This page walks you through each one once, start to finish. Every step links to a full guide if you want the detail.

{% hint style="info" %}
**Before you start:** Content Egg Pro is installed and your license is activated — see [**Installation & Licensing**](/getting-started/installation).
{% endhint %}

***

## Step 1 · Connect a product source

*Stage: **Connect** — get product data into WordPress.*

Everything starts with a source of products. Go to **Content Egg → Modules** and activate one:

* **An affiliate network module** (for example Amazon, eBay, or AliExpress) — enter your API keys or affiliate ID and save.
* **A product feed** — if your merchant provides a CSV, XML, or JSON feed, connect it instead.

<figure><img src="/files/654XV61YPLew45V0RDtm" alt="Activating a module on the Content Egg Modules screen"><figcaption><p>Activate a module and enter its keys</p></figcaption></figure>

**You should now see** the module active on the Modules screen, ready to search.

📖 Learn more: [**Modules**](/modules/general-information) · [**Feed modules**](/modules/feed-modules)

***

## Step 2 · Add products to a post

*Stage: **Publish** — attach real products to your content.*

Open a post (or create a new one) and find the **Content Egg** panel (the egg icon, top-right). Click **Search & add products…**, type a keyword, and click a result to attach it. Content Egg pulls in the title, image, price, and link for each product.

<figure><img src="/files/b8pxjFjG0JHzEgRWH1Dx" alt="Searching for products and adding them to a post"><figcaption><p>Search for products and attach them to your post</p></figcaption></figure>

**You should now see** your chosen products saved to the post, with live prices and affiliate links.

📖 Learn more: [**How to add products**](/set-up-products/how-to-add-products) · [**Search & Import**](/set-up-products/import-tools/search-and-import)

***

## Step 3 · Display them

*Stage: **Publish** — turn the products into something readers act on.*

Choose how the products appear on the page:

* **CE Products block** — insert it, pick a template, and it shows your products (list, grid, comparison table, and more). Prices stay current on their own. Best when you're writing the article yourself and just want to show products.
* **Egg Blocks** — build a full review or roundup from editorial blocks (intro, comparison table, pros & cons, verdict, FAQ). Best for structured articles, and the format an AI assistant generates for you.

<figure><img src="/files/kCb0pp9ybOPkI7kHiFCu" alt="A Products block and Egg Blocks in the WordPress editor"><figcaption><p>Display products with the Products block or Egg Blocks</p></figcaption></figure>

**You should now see** your products rendered on the front end — publish the post and you have a working, monetized page.

📖 Learn more: [**Gutenberg product blocks**](/frontend/gutenberg-blocks) · [**Egg Blocks**](/egg-blocks/introduction)

***

## Step 4 · Scale it (when you're ready)

*Stage: **Scale** — do it in volume, or hands-off.*

Once your first page works, you can go faster:

* **Import tools** — create many product pages at once from keyword lists or feeds, and keep prices updated automatically.
* **Agent Access** — connect ChatGPT, Claude, or any AI assistant and ask it, in plain language, to find products and build whole pages for you. It saves drafts by default, so nothing goes live until you approve it.

<figure><img src="/files/GsM5C8TDdGxNsAWDHtDf" alt="An AI assistant building a product roundup draft"><figcaption><p>Let an AI assistant find products and build pages for you</p></figcaption></figure>

📖 Learn more: [**Import tools**](/set-up-products/import-tools) · [**Agent Access**](/ai-agents/ai-agents)

***

That's the whole workflow. From here, follow the linked guides for anything you want to go deeper on — or head straight to [**Agent Access**](/ai-agents/ai-agents) and let an assistant do the heavy lifting.


# Automatic updates

* Keep your **updates active** to avoid expiration and ensure seamless access to new features.
* You can renew your updates anytime via your [User Panel](https://www.keywordrush.com/panel).
* The default update period is **1 year**, with a **lifetime updates** option available if you prefer.

When a new update is released, you’ll receive a notification directly in your **WordPress Admin Panel**.\
Update the plugin with a single click, just like any other WordPress plugin.

Always use the **latest version** to guarantee compatibility, security, and access to new features.

![](/files/-M57agMyvHXYelvkrF9q)

### Changelog

View detailed **release notes** and version history here:\
👉 Content Egg Pro – [**Changelog**](https://www.keywordrush.com/changelog/content-egg/readme.txt)


# General information

After installing the plugin, you'll need to activate the affiliate network or content source modules you'd like to work with. There are four module types:

1. Product modules
2. Feed modules
3. Media modules (images and videos)
4. Coupon modules

Go to `Content Egg > Modules` to activate the required modules.

<figure><img src="/files/654XV61YPLew45V0RDtm" alt="The Content Egg Modules page"><figcaption><p>Content Egg → Modules</p></figcaption></figure>

To activate a module, fill in all the required fields (marked with an asterisk) and tick `Enable module`. See each module's documentation for help with its specific fields.

![](/files/-MTUNAauLKslPjT4dCzW)


# Affiliate modules


# Aliexpress module

### How to get App Key and App Secret

Please follow [this guide](https://open.aliexpress.com/doc/doc.htm?nodeId=27493\&docId=118729#/?docId=1234) to register your **affiliate application** and generate your API credentials.

### How to get your Tracking ID

You need to set your Tracking ID if you want to send traffic through the Aliexpress portal.

1. Log in to your account at <http://portals.aliexpress.com/>
2. Follow `Settings → Tracking ID`

![](/files/-M5CWraPATsYwQq-xIhy)

### How to set Deeplink

You can also send traffic through any affiliate network with Aliexpress support (for example, [epn.bz](http://keywordrush.com/go/epnbz)).

{% content-ref url="/pages/-MTUXEKm5VcN0CRKILEW" %}
[Deeplink settings](/modules/deeplink-settings)
{% endcontent-ref %}


# Amazon module

The Amazon module lets you search and import products from Amazon Associates into Content Egg, keep product data up to date, and display them with Product Blocks and shortcodes.

### Important notes before you start

#### API access required

This module requires **active Amazon API access** (Creators API). If you don’t have API access yet, see [Alternatives to Amazon API](#alternatives-to-amazon-api-no-api-access-required) below.

***

### What you need

To use the Amazon module, you need:

1. **Associate Tag (Partner Tag)**
2. **Creators API credentials**: **Credential ID** + **Credential Secret**

{% hint style="info" %}
If you just created your API access, Amazon may take **24–48 hours** to fully activate it.
{% endhint %}

***

### How to get your Associate Tag

To obtain an Associate Tag, follow [Amazon’s guide](https://affiliate-program.amazon.com/creatorsapi/docs/en-us/onboarding/sign-up-as-an-amazon-associate).

***

### How to get Credential ID and Credential Secret (Creators API)

Follow Amazon’s “[Register for Creators API](https://affiliate-program.amazon.com/creatorsapi/docs/en-us/onboarding/register-for-creators-api)” guide.

After you create credentials:

* Credential Secret is shown only once (store it safely).
* Use the credentials in Content Egg → Modules → Amazon.

***

### Alternatives to Amazon API (no API access required)

If you don’t have API access, Content Egg still offers ways to add Amazon products:

1. **NoAPI Amazon module**\
   Start with the [NoAPI module](/modules/affiliate/amazon-no-api-module) to publish links quickly and generate initial sales. Once you get API access, you can migrate to the Amazon API module.
2. **Affiliate Egg integration**\
   Use the [Affiliate Egg plugin](https://www.keywordrush.com/affiliateegg) (direct parsing without Amazon API) and [connect it](/modules/affiliate-egg-integration#how-to-connect-ae-modules) with Content Egg.
3. **Offer module**\
   [Add any product manually](/modules/affiliate/offermodule) (works for any store, including Amazon).

***

### Searching for products

Content Egg’s Amazon module supports several search methods. You can use whichever is most convenient for your workflow:

* **Keywords**\
  Search by product name, brand, model, or any query (for example: `wireless earbuds`, `Ryzen 7 laptop`, `LEGO Technic`).
* **ASINs**\
  Search by one ASIN or multiple ASINs separated by commas (useful when you already know exact product IDs).
* **EANs**\
  Search by one or multiple EAN/GTIN codes. Multiple EANs should be separated by commas.
* **Direct product URLs**\
  Paste an Amazon product URL (Content Egg will extract the ASIN automatically and fetch the product).
* **Category (node) URLs**\
  Paste a URL that contains a **browse node** parameter in the format: `node=XXX`\
  Example: a category link where the URL includes `?node=123456789`

<div data-full-width="false"><figure><img src="/files/8SccBrxlikEZupb5fVks" alt=""><figcaption></figcaption></figure> <figure><img src="/files/Oyp53I7fSzKmOVpTYH1K" alt=""><figcaption></figcaption></figure></div>

<div><figure><img src="/files/N9s4zgrmWbx75ySfIpC4" alt=""><figcaption></figcaption></figure> <figure><img src="/files/g76CoCGtIx6W8UpcgfcF" alt=""><figcaption></figcaption></figure></div>

***

### Amazon multi-locale setup (best practices)

Amazon has multiple marketplaces (US, UK, DE, etc.). There are three common ways to handle this.

Before choosing one, it helps to know that API credentials cover a whole **region**, not a single marketplace — see [API credentials are per region](#api-credentials-are-per-region-na-eu-fe) at the end of this section.

#### 1) Amazon OneLink (recommended)

Amazon OneLink allows you to link multiple Amazon Associate accounts. Visitors are redirected to their local (or nearest) Amazon store automatically.

* Easiest setup
* No extra scripts required (you simply link accounts)
* Great for international traffic

Configure OneLink here:\
<https://affiliate-program.amazon.com/onelink>

{% hint style="info" %}
**US Associates already have this.** In August 2026 Amazon enabled **Global Earning** for all US creators automatically. US links now redirect international shoppers to their local store in nine additional countries, with no OneLink setup at all.

If that is not what you want, see [Global Earning (international redirects)](#global-earning-international-redirects) below.
{% endhint %}

#### 2) Module cloning (one module per locale)

Use Content Egg [**Module cloning**](/modules/cloning) to create a separate Amazon module per marketplace. This lets you:

* Import products from multiple locales
* Let visitors choose which marketplace to buy from

**Video guide** (OneLink vs module cloning):\
<https://www.youtube.com/watch?v=LWA4V-qKZ3s>

#### 3) Locale parameter + (optional) GeoIP plugins

Use one Amazon module and set **Associate Tags for multiple locales** in settings.

When searching in the post editor, choose the marketplace/locale for the search. Then display marketplace-specific products with a shortcode locale filter:

```
[content-egg module=Amazon locale=US]
```

**Note:** Content Egg does not include built-in GeoIP detection. You can combine it with a third-party plugin that supports shortcodes, for example **GeoIP Detection**.

Example (show US products only to US visitors):

```
[geoip_detect2_show_if country="US"]
[content-egg module=Amazon locale=US]
[/geoip_detect2_show_if]
```

Video guide (GeoIP + locale filtering):\
<https://www.youtube.com/watch?v=M8tQztVGkzY>

#### API credentials are per region (NA / EU / FE)

Creators API credentials are tied to a **region**, not to an individual marketplace. One credential pair works for every marketplace inside its region.

| Region | Marketplaces                                               |
| ------ | ---------------------------------------------------------- |
| **NA** | US, CA, MX, BR                                             |
| **EU** | UK, DE, FR, IT, ES, NL, BE, IE, PL, SE, EG, IN, SA, TR, AE |
| **FE** | JP, SG, AU                                                 |

**What this means in practice.** Qualifying sales unlock API access for the whole region. If you reach the required sales in the US, the same credentials should also give you API access to the other NA marketplaces, without reaching that number in each one separately.

**In the module settings.** Fill in the **Primary** Credential ID and Secret first. If your products span more than one region, add the extra pairs:

* Credential ID / Secret — NA region
* Credential ID / Secret — EU region
* Credential ID / Secret — FE region

Each locale automatically uses the credentials of its own region. If a region pair is empty — or only half filled in — Content Egg falls back to the Primary credentials. So a single-region catalog needs nothing beyond the Primary pair.

{% hint style="info" %}
This region behaviour is not described in Amazon's documentation. It is based on our own testing and on feedback from users, so treat it as a practical observation rather than an official rule.
{% endhint %}

If you see an eligibility error instead, see [“AssociateNotEligible” error (403)](#associatenoteligible-error-403).

***

### Global Earning (international redirects)

In August 2026 Amazon enabled **Global Earning** for all US creators. Existing Amazon.com affiliate links now send international shoppers to their local Amazon store — Canada, United Kingdom, Germany, Italy, Spain, Netherlands, Poland, Sweden and France. Nothing has to be configured, and there is no opt-out in the Associates dashboard.

When the exact product is not sold in the shopper's country, Amazon may send them to a **similar product instead**, which can be a different model or a different brand than the one your article reviews.

Content Egg adds a **Global Earning** setting to the Amazon and [Amazon No API](/modules/affiliate/amazon-no-api-module) modules so you can control this.

| Value                         | What happens                                                                            |
| ----------------------------- | --------------------------------------------------------------------------------------- |
| **Similar product** (default) | Amazon's own behaviour. A substitute product may be shown when there is no exact match. |
| **Search results**            | The shopper lands on local search results instead of a substitute product.              |
| **No redirect**               | The redirect is switched off. Shoppers stay in the store the module uses.               |

The setting applies to links as they are displayed, so it takes effect on products you have already imported — no re-update is needed. Switching back removes it again.

#### Which value to choose

* **Similar product** — roundups, gift guides and general recommendations, where any comparable product is an acceptable outcome and international commissions are worth having.
* **Search results** — detailed reviews and comparisons, where sending a shopper to a different brand is worse than sending them to a search page.
* **No redirect** — sites that deliberately promote one country's catalog to readers elsewhere, for example a European site listing products only sold on Amazon.com. Note that this gives up international commissions entirely.

#### Cloned modules

The setting is stored per module, including [cloned modules](/modules/cloning). A German Amazon module and a US clone can use different values on the same site — for example the German module on **Similar product** and the US clone on **No redirect**.

{% hint style="warning" %}
**Experimental.** Amazon does not publicly document the link parameters behind **Search results** and **No redirect**, so this behaviour may change without notice.
{% endhint %}

Background and testing details:\
<https://www.keywordrush.com/blog/amazon-global-earning-enabled-by-default/>

***

### Checkout on Amazon feature

The [**Checkout on Amazon**](/faq/checkout-on-amazon-feature) feature allows visitors to add Amazon products to a local WooCommerce cart and complete the purchase directly on Amazon.

***

### Troubleshooting

#### “AssociateNotEligible” error (403)

Error message:\
`AssociateNotEligible (403) – Your account does not currently meet the eligibility requirements to access the Product Advertising API.`

Amazon requires **10 qualified sales in the last 30 days** to gain/keep PA-API access.

More details:\
<https://www.keywordrush.com/blog/amazon-pa-api-associatenoteligible-error-is-there-a-new-10-sales-rule/>

#### Amazon Associates support

For Amazon Associates account issues:

* Go to Amazon Associates → **Help** → **Contact Us**
* Choose **Creators API** in the Subject dropdown


# Amazon No API module

A quick guide to using the Amazon NoAPI module in Content Egg to add Amazon products without API access.

### Why this module?

Content Egg already includes an [Amazon API module](/modules/affiliate/amazon). However, Amazon’s requirements can be challenging for beginners:

* You must refer **3 qualified sales within 180 days** of opening your Associates account to receive initial API access.
* After that, you must generate [**10 sales in the last 30 days**](https://www.keywordrush.com/blog/amazon-pa-api-associatenoteligible-error-is-there-a-new-10-sales-rule/) to keep API access active.

Because these rules often prevent new users from working with the API, we created the **Amazon NoAPI** module. It allows beginners to start building their sites and adding Amazon products right away—without waiting for API approval.

### How it works

The Amazon NoAPI module operates as a web scraper. Since Amazon may temporarily block server IPs when it detects too many requests, we recommend using the built-in integrations with third-party scraping services:

* [ScrapingDog](https://www.keywordrush.com/go/scrapingdog)
* ScrapeOwl
* [ScraperAPI](https://keywordrush.com/go/scraperapi)
* Crawlbase

{% hint style="warning" %}
These services are paid, but each provides **free monthly quotas** (typically around 1,000 requests per month), which is enough for most small and medium sites.
{% endhint %}

{% hint style="success" %}
**Tip:** You can add multiple scraping service API keys in the module settings. Content Egg will then randomly rotate between them, helping you stay within each service’s free limits and reducing the risk of throttling.
{% endhint %}

{% hint style="info" %}
This module is intended for beginners, allowing them to start working on their website. After achieving three sales and receiving an API key, it's recommended to switch to the [Amazon module](/modules/affiliate/amazon) via the official API.
{% endhint %}

### Price updates

For sites displaying product prices, Amazon mandates daily price updates. However, due to the challenges of web scraping, **price display and updates are disabled by default** in the NoAPI module. You can enable them in the module settings if needed.

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

{% hint style="success" %}
Once you have API access and have configured the Amazon API module, you can delegate the task of updating prices to the Amazon module via the Product Advertising API.
{% endhint %}

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

### How to get Associate Tag

To obtain an Associate Tag, refer to [Becoming an Associate](https://webservices.amazon.com/paapi5/documentation/troubleshooting/sign-up-as-an-associate.html).

### Search by ASIN or URL

To find the right product, you can search using product URLs or ASINs. This method requires far fewer queries to the source site compared to a keyword search.

![](/files/-Md5wWjKzJDxgo6Jpr3F)

### Multiple locales

Read more: <https://ce-docs.keywordrush.com/modules/affiliate/amazon#multiple-locales>

### Global Earning (international redirects)

This module has the same **Global Earning** setting as the Amazon module: choose whether Amazon may substitute a similar product for international shoppers, send them to local search results, or skip the redirect entirely.

Read more: [Global Earning (international redirects)](/modules/affiliate/amazon#global-earning-international-redirects)

### Troubleshooting

#### Prices in the plugin do not match the prices on the Amazon site.

Amazon may display different prices based on the visitor's location. If you're using a scraping service, the bot may be assigned a random country, leading to price discrepancies.

To resolve this, you can add a specific parameter to your request to filter by country. For example, to use DE-based IPs, add the following code to your theme's `functions.php` file:

```php
// For ScraperAPI
add_filter('cegg_amazon_client_url', 'my_cegg_amazon_client_url', 10, 1);
function my_cegg_amazon_client_url($url) {
    return add_query_arg('country_code', 'de', $url);
}

// For ScrapingDog
add_filter('cegg_amazon_client_url', 'my_cegg_amazon_client_url', 10, 1);
function my_cegg_amazon_client_url($url) {
    return add_query_arg('country', 'de', $url);
}
```


# Avantlink Products module

### How to get Affiliate ID

Log in to your account, go to `Account` → `API Authorization Key` and find your `Affiliate ID`.

![](/files/-M4t41VAqWeP1e99Bvwq)

### How to get Website ID

Log in to your account, go to `Account` → `Edit Websites` and find your `Website ID`.

![](/files/-M4t4EKRWsg1pLu4Pv80)

### Merchant domains

The Avantlink API doesn't always provide direct product links or merchant domains. To address this, you need to manually add merchant-to-domain matching pairs. You can do this by adding the following code to your `functions.php` file:

```php
function my_avantlink_merchant2domain($m2d) {
    $m2d['Amazon'] = 'amazon.com';
    $m2d['GritrSports'] = 'gritrsports.com';

    return $m2d;
}

add_filter('cegg_avantlink_merchant2domain', 'my_avantlink_merchant2domain', 10, 1);
```


# Awin module

### How to Get Your Datafeed Download URL

1. If you don’t have an account on the **AWIN affiliate network**, [create one here](https://www.keywordrush.com/go/awin).
2. Navigate to **Toolbox → Create-a-Feed**.
3. Select your desired **language**, **categories**, **advertisers**, and other options, then click **Next**.
4. Copy the **generated feed URL** displayed at the bottom of the page.

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

### What Happens After Import

* All products from the datafeed will be imported into your site's **local database**.
* Once imported, you can **search and filter products** by keywords directly from your local database.
* Feed loading starts **in the background** automatically when you **activate** the module or **re-save its settings**.
* Please allow a few minutes for the feed to finish loading before using search features.

{% hint style="info" %}
The feed will automatically re-sync each time you change the module settings.
{% endhint %}

#### Check for Feed Loading Errors

To ensure everything is working correctly, verify that **no errors occurred** during the feed import process.

![](/files/-M8RKZpqEjVC4_Q2KNo4)

#### Important: Data Feed Size Warning

Large feeds can put significant strain on your server. For best performance:

* **Avoid importing extremely large feeds** (over 100,000 products).
* **Split feeds** by categories or advertisers when possible.
* Use multiple instances of the [**Feed Module**](/modules/feed-modules) to manage separate datafeeds.

![](/files/-M4t5OM5QEcRcqR4ZirE)

### Search Options

You can search imported products:

* By **keyword**
* Or by **direct link**

![](/files/-M4t5a9y4204kqXjDazH)

### FAQ

#### I can download an advertiser's datafeed, but I'm not joined to them. How is that possible?

Awin has a **"soft membership"** policy.\
This applies to advertisers who:

* Have **auto-join** enabled for affiliate approvals, and
* Provide a valid datafeed.

You can access their feed even if you're not explicitly joined.\
If a sale is made using this feed, **you will still be credited** for the commission.

#### How can I manually update the local database without waiting for the automatic sync?

You can force a manual refresh:

1. Go to **Content Egg → Settings → Awin**.
2. Simply **resave the settings**.

This will clear the local database.\
The datafeed will be **automatically re-downloaded** the next time you perform a product search.

#### What happens if a product no longer exists after the feed update?

If a product is missing from the latest feed:

* Its **stock status** will be set to **"Out of Stock"** in the local database.

#### Why is the domain name or merchant logo missing or incorrect?

Some advertisers **don’t include original product URLs** in their feed.\
As a result, Content Egg can’t detect the correct domain or logo.

You can fix this using a custom mapping in your `functions.php` file:

```php
function my_awin_mapping( $pairs ) {
    $pairs['Cdiscount FR'] = 'cdiscount.com';
    $pairs['Darty FR']     = 'darty.com';
    return $pairs;
}

add_filter( 'cegg_awin_merchant_mapping', 'my_awin_mapping', 1 );
```


# Bestbuy module

### How to get your API Key

Before you can start using Best Buy APIs, you need an API key. Visit [GET API Key](https://developer.bestbuy.com/login) and sign up with your email address (free/edu email providers may not be accepted). Best Buy will send you an email with instructions on how to activate your new key.

### How to get your Impact Partner ID

You can sign up for the Best Buy Affiliate Program through [Impact Radius network](https://app.impact.com/login.user).

The number under your account name is your Impact Partner ID:

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

**Notify Best Buy of your Impact Partner ID**

Submit the [contact form](https://developer.bestbuy.com/contact-us?topic=affiliate-api) with the following information from your application to complete the registration process.

```
Your Impact Partner ID
Company Name
Contact Name
Contact Email
```

Please read more here: <https://developer.bestbuy.com/affiliate-program>


# Billigerde module

Use the Billiger.de WordPress plugin for price comparison websites to access over 100 million product records from more than 2,000 stores. Integrate Billiger.de shop data into your website and create

#### Introduction

The Content Egg **Billiger.de module** lets you integrate product offers from Billiger.de into your website.

Billiger.de is structured around three entity types:

**Base products → Products → Offers**

When you search by keyword, Billiger.de may return either **base products** or **products**, depending on the selected search settings. Content Egg then resolves these results into actual **shop offers**, so the saved entries always include offer-specific information such as price, merchant, and availability.

#### How to Join the Affiliate Program

To register for the affiliate program, submit the application form at:

`https://www.solutions.billiger.de/en/partner-program/`

#### API Credentials

To access the Billiger.de API, enter your **User** and **Password** in the module settings.

#### Search Result Type Setting

In the module settings, you can choose the default **Search result type**.

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

This setting determines which Billiger.de entity type is searched first when using keyword-based search. Regardless of whether the initial match is a base product or a product, Content Egg always converts the result into a concrete shop offer before saving it.

#### Best Practice

We recommend searching by direct **base product** or **product** URL whenever possible, as this usually provides the most accurate match.

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

Supported URL formats include URLs containing **`baseproducts`** or **`products`**, for example:

* `https://www.billiger.de/`**`baseproducts`**`/110057-apple-macbook-air-m4-2025`
* `https://www.billiger.de/`**`products`**`/5442274125-sony-playstation-5-slim-digital-edition-fortnite-flowering-chaos`

#### EAN Search

The module also supports search by **EAN**.

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


# Bolcom module

How-to Add Bol.com Affiliate Products in WordPress

Bol.com’s affiliate program (also called the Bol Partner Platform) lets publishers promote products from Bol’s large catalog and earn commissions on sales generated via their affiliate links. Bol.com is a major online retailer in the Netherlands and Belgium, offering many product categories, which makes it a good opportunity for affiliate marketers targeting those markets.

{% hint style="success" %}
**Recommended Reading**\
Want a complete step-by-step guide? Check out our in-depth article: [How to Build a Bol.com Affiliate Website in One Day](https://www.keywordrush.com/blog/how-to-build-a-bol-com-affiliate-website-in-one-day/).
{% endhint %}

### Step 1: Register for the Bol.com Partner Program

To begin using the Bolcom module, you must first register for the Bol.com Partner Program:

👉 [Register here](https://partner.bol.com/account/registratie/start)

{% hint style="info" %}
**Note:** If you already have a Bol.com account (used for shopping), you can log in with it. However, it's recommended to create a separate account specifically for affiliate purposes to keep things organized.
{% endhint %}

### Step 2: Obtain Your Client ID and Client Secret

1. Log in to your affiliate dashboard.
2. Click **"**[**Account**](https://partner.bol.com/account/affiliate/myAccount)**"** in the top menu.
3. Scroll down to the **"API toegang"** (API Access) section.
4. Create new API credentials for **"Marketing API"**.
5. Copy the **Client ID** and **Client Secret**.
6. Paste these credentials into the Bolcom module settings.

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

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

### Step 3: Get Your Website Code

1. Log in to your Bol.com affiliate account.
2. Click **"**[**Account**](https://partner.bol.com/account/affiliate/myAccount)**"** in the top menu.
3. Navigate to the **"Website"** section.
4. Copy your **Website Code**.
5. Enter this code in the module settings.

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

### Search Tips

The Bolcom module supports multiple methods for finding products. You can search using:

* **Keywords** – Enter product names or general terms to browse matching results.
* **EANs** – Use EAN/GTIN for precise product searches.
* **Direct Product URLs** – Paste a product URL to retrieve that specific item.
* **Category URLs** – Use category links to explore top-selling products in that section.

<figure><img src="/files/6P4vIm8qLX4tNVrIfxwh" alt=""><figcaption></figcaption></figure>

### Watch the Video Guide

Prefer to follow along visually? Check out our step-by-step tutorial on YouTube.

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


# CityAds Products module

### Getting Remote\_auth

1. If you do not have an account in the Cityads affiliate program, create one.
2. Follow `Office` → `Private office` → `API` and get your `Remote_auth` Key.


# Coupang module

Coupang WordPress Plugin Guide – How to Use the API for Affiliate Products and Monetization

Coupang is a leading South Korean e-commerce platform, often called the "Amazon of Korea." It sells everything from electronics to groceries and is famous for its Rocket Delivery service, offering same-day or next-day shipping.

It also runs **Coupang Partners**, an affiliate program where publishers can earn commissions by promoting Coupang products.

### How to get your Access Key & Secret Key

1. **Confirm eligibility**
   * Coupang Partners API access is available only to **fully approved** Coupang Partners accounts.
   * If you need API access **before final approval**, email the Partners team with your **AF ID**, plus details on **where** and **how** you will place ads; they will review and advise.
2. **Sign in to Coupang Partners**
   * Log in to your Coupang Partners account.
3. **Open the API page**
   * From the **top menu**, go to **Tools → 파트너스 API (Partners API)**.
4. **Generate keys**
   * Click the **Create/Generate** button.
   * Your **Access Key** and **Secret Key** will be issued **immediately** to approved accounts.
5. **Add to Content Egg**
   * In WordPress → **Content Egg → Modules → Coupang**, paste:
     * **Access Key** → “Access Key”
     * **Secret Key** → “Secret Key”
   * Save settings and test a search on the post edit page.

<figure><img src="/files/3g3TvIereFnnHrYDUgkM" alt=""><figcaption></figcaption></figure>

### API Limitations

The Coupang API provides only **basic product data** such as product title, image, and price. It does **not** return extended details like product descriptions, attributes, or specifications.

👉 **Important:**

* You can search for products **by keywords only**. Searching directly by **product URLs** is not supported.
* Each request can return a **maximum of 10 products**.
* The API server may be restricted from many **geo IPs**, so it’s recommended to use **local hosting servers** for reliable access.

Even with these restrictions, the API is still a powerful way to add Coupang affiliate product blocks to your site and monetize traffic. You can also enhance listings by using the plugin’s built-in [AI features](/ai/content-generation-with-product-import) to generate additional content.

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

### Price Update Limitations

The Coupang API does not offer a direct method to check or update **prices** and **stock status** of products by product ID.

To keep product information current, the plugin uses the following fallback approach:

1. Re-search and try to match the product using the **original keyword**.
2. If no match is found, attempt to match by the **product title**.

This process usually finds the correct product and updates the price, but it is not 100% reliable. If a product cannot be matched, two outcomes are possible:

* Mark the product as **out of stock**, or
* Keep the **last known price** and mark stock status as **unknown**.

You can choose your preferred behavior in the module settings under the **“Stock Status”** option.

You can also set a [**keyword for auto-update**](/updating-products/updating-the-product-list) to refresh product listings and keep them up to date.


# CJ Products module

### Getting Personal Access Token

A Personal Access Token is a unique identification string for your account. Personal Access Tokens allow for secure authentication when accessing the CJ APIs.

You can manage your personal access tokens from the [personal access tokens](https://developers.cj.com/account/personal-access-tokens) page.

![](/files/-M4t9t_ZOBRvp_0BFq9V)

### Getting Company ID

CID or Company ID is your account number. This number is located on the top right side of your screen next to your name.

### Getting Website ID

1. Log in to your CJ account.
2. Follow `Account → Websites` and find the ID of your site:

![](/files/-MCuVXOKBk0M66Kcwd_r)


# Daisycon module

⚠️ Deprecated

The **Daisycon module is deprecated** and no longer actively maintained.

Please use the more flexible **Feed module** instead, which fully supports Daisycon feeds and is compatible with **any standard CSV feed**.

👉 Learn more: [Feed modules](/modules/feed-modules)


# Ebay module

### How to get App ID and Cert ID

1. [Register](http://developer.ebay.com/join/) for the eBay Developer Program.
2. Log in to your account and [generate](https://developer.ebay.com/my/keys) your App ID/Cert ID (**Production Key Set**).

![](/files/-MW8nsbclFEjexhaXyCT)

{% hint style="warning" %}
Make sure OAuth is enabled for your keys; enable it if it isn't.
{% endhint %}

![](/files/-MW8oIU3LsvGsL4JAqLD)

### Deletion/Closure Notifications

The Content Egg plugin does not store any personal data of eBay's users. Because of this, the developer may apply for exemption from receiving eBay marketplace account deletion/closure notifications. For more information, see the [Opting Out of eBay Marketplace Account Deletion/Closure Notifications](https://developer.ebay.com/marketplace-account-deletion#optingOut).

![](/files/-MhIVRfB3MGio05gIm1o)

### Campaign ID

1. If you don't have an account in ePN, [register](https://partnernetwork.ebay.com/).
2. `Campaign ID` is visible in the `Campaigns` list in your ePN account.

![](/files/-Mjd1f2_KaMoVRzEFCDn)

### Deeplink

Set this parameter only if you want to send traffic through third party affiliate networks with eBay support. Read more: [How to find your deeplink](/modules/deeplink-settings).

### Multiple locales and Geolocation IP detection

You can work with multiple eBay locales and geolocation IP detection, similar to [how it works in the Amazon module](https://ce-docs.keywordrush.com/modules/affiliate/amazon#2-geolocation-ip-detection).


# Envato module

### Getting Token

1. [Register an account](https://themeforest.net/sign_up_sso?ref=keywordrush) on Envato.
2. Open [this page](https://build.envato.com/create-token/?ref=keywordrush) and create your token.

![](/files/-M4xGZotQJYLEZSGS78A)

{% hint style="success" %}
Don't forget to set your Deeplink in the module settings to get affiliate commissions.
{% endhint %}


# Flipkart module

### How to get Affiliate Tracking ID and Token

1. [Register an account](https://affiliate.flipkart.com/registerme) or use an existing one.
2. Go to `API` → `TOKEN` and find `Affiliate Tracking ID` and `Token`.

![](/files/-M4xH0Pn1PPgg3ssCKHp)


# GdeSlon module

### Getting API Key

1. If you don’t have an account in the GdeSlon affiliate program, [create one](http://www.keywordrush.com/go/gdeslon).
2. Log in to your GdeSlon account, follow `Settings` → `XML API` and find your API Key.


# Geizhalsde module

Integrate Geizhals.de product data into your WordPress website with the Content Egg Geizhals.de module. Search products by keyword, direct product URL, or EAN.

The **Geizhals.de module** allows you to import product offers and price comparison data from Geizhals into your website.

#### Joining the Affiliate Program

To join the Geizhals affiliate program, submit a partnership request on the Geizhals Publisher page. Include your name, email address, website, and a short description of your project. Once your application is approved, the Geizhals team will send you the required access credentials and integration details.

`https://unternehmen.geizhals.at/publisher/`

#### API Credentials

To use the Geizhals.de Product API, enter your **User Name** and **Secret Key** in the module settings. These credentials are provided by the Geizhals team.

#### Search Methods

The module supports the following search methods:

* **Keyword search**
* **Direct product URL search**
* **EAN search**

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

Each successful search returns the full Geizhals price comparison list for the matched product.

#### Keeping Prices and Offers Updated

To keep offer data current, configure the **Price Update interval** in the module settings.

For better automatic updates, you can set **Auto-update keywords** to either a direct **product URL** or an **EAN**. This allows Content Egg to re-check the same product page during updates. If new offers become available on the Geizhals page, they can be added automatically to your WordPress post as well.

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


# ImpactRadius module

#### How to Get Your Account SID and Auth Token

The **impact.com Web Services API** uses two credentials for authentication:

* Account SID
* Auth Token

You must generate these credentials in your impact.com account before using the ImpactRadius module.

#### Step-by-Step Guide

**1. Open the API Access page**

Navigate to the API credentials section:

<https://app.impact.com/secure/mediapartner/accountSettings/mp-wsapi-flow.ihtml>

**2. Click “Create Access Token”**

This begins the process of generating a new API key pair.

**3. Enter a Token Name**

Choose any descriptive name (e.g., *Content Egg Integration*), then click **Next**.

**4. Contact Information**

Click **Next** to continue.

**5. Configure API Scopes**

On the **Configure API Scopes** screen:

* Enable **Catalogs**
* Select **all API paths** related to catalog access

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

**6. Finish and open your new credential**

After creation, go to the page for your new access token.

**7. Copy your credentials**

Open the **API Credentials** tab.

There you will find:

* **Account SID**
* **Auth Token**

Copy both values and paste them into the ImpactRadius module settings in Content Egg.

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


# Kelkoo module

### Getting Token

1. If you don’t have an account in the Kelkoo affiliate program, [create one](https://www.kelkoogroup.com/products/become-a-publisher/).
2. Log in to your Kelkoo account, go to `Admin → API credentials → Shopping API` and issue a new *Token*.

![](/files/-Md5v5dz-N0ZXViIGlF4)

{% hint style="warning" %}
A token must be linked to an Application. An application is set up by an account manager. If an application is not yet activated for you, please ask Kelkoo support to activate it.
{% endhint %}


# Kieskeurignl module

### How to get your Token and Affiliate ID

Kieskeurig.nl does not have a public affiliate program. Please contact the Kieskeurig team directly to gain access to their affiliate program and your API credentials.

### How to update product lists

It's recommended to use the [auto-update of product listings](/updating-products/updating-the-product-list) feature for this module.

To search for products you can use:

* EAN
* Kieskeurig product ID
* Kieskeurig product URL
* Product title (keyword search)

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

### Merchant domains

The Kieskeurig API does not return direct product links or merchant domains. For this reason, you need to add `merchant -> domain` matching pairs manually. Add code like this to your functions.php file:

```php
function my_kieskeurignl_merchant2domain($m2d)
{
        $m2d['Amazon'] = 'amazon.nl';
        $m2d['JBlokker connect'] = 'blokker.nl';
        $m2d['Bemmel en Kroon'] = 'bemmelenkroon.nl';

        return $m2d;
}

add_filter('cegg_kieskeurignl_merchant2domain', 'my_kieskeurignl_merchant2domain', 10, 1);
```


# Rakuten Linkshare module

This guide will help you configure the Rakuten LinkShare module in the Content Egg plugin.

{% hint style="info" %}
You can also use the [Feed module](/modules/feed-modules) to import Rakuten product feeds, as an alternative to the Rakuten API module.
{% endhint %}

### Getting Your SID

1. **Register or Log In**:\
   Go to [rakutenadvertising.com](https://rakutenadvertising.com/) and sign up, or log in with your existing **publisher account**.
2. **Find Your SID**:\
   After logging in, navigate to your Rakuten Publisher Dashboard. Your SID is a **numerical value** listed as your account ID.

<figure><img src="/files/7zsgppTXINM1NozdOIGg" alt=""><figcaption></figcaption></figure>

### Getting Your Client ID and Client Secret

1. **Go to the Developer Portal**:\
   Visit [developers.rakutenadvertising.com](https://developers.rakutenadvertising.com/) and log in using your Rakuten credentials.
2. **Create a New Application**:
   * Click on the **“Add Application”** button.
   * Enter a name for your app (you can use any name).
   * Complete the form and submit it to create the application.
3. **Copy Your Credentials**:\
   Once your app is created, you’ll be shown a **Client ID** and **Client Secret**.\
   Copy both and paste them into the Rakuten LinkShare module settings in Content Egg.

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

{% hint style="warning" %}

#### Important Notes

The Rakuten API will **only return product results** if your **advertisers have product feeds uploaded** into the Rakuten database.\
Make sure the advertisers you are approved for have active product feeds.
{% endhint %}


# Linkwise module

### How to get API Username and API password

Please ask Linkwi.se support for your API credentials.


# Lomadee Products module

Lomadee module setup

### How to get your API Token

1. Log in to your Lomadee account.
2. In the **bottom-left** of the page, click your **username** (profile menu).
3. Click **“Credenciais de API”**.
4. Copy your **Token** and paste it into the Content Egg → Modules → Lomadee Products module settings.

<div><figure><img src="/files/hu1wthSBRzlfOkgb8bPt" alt=""><figcaption></figcaption></figure> <figure><img src="/files/aC6KFs2ul4XZLgzF4NZL" alt=""><figcaption></figcaption></figure></div>

### Lomadee API limits and important notes

#### 1) Rate limit (very low)

Lomadee’s API limit is **10 requests per minute**.

Keep in mind:

* **Each product search** = **1 request**
* **Each affiliate link generation** = **1 request**

This can be reached quickly, especially on pages with many products.

#### 2) Search can include advertisers you’re not approved for

The Lomadee product search API can return products from the **full catalog**, including advertisers:

* you are **not approved** for yet, or
* that are **not allowed** for affiliate links in your account.

Because of this, it’s recommended to set:

**Advertiser (Organization) IDs**\
Add a comma-separated list of advertiser Organization IDs (UUIDs) to **limit results** to advertisers you actually want to use (and ideally are approved for).

If you leave it empty, searches may return products from any advertiser, and some affiliate links may not be possible to generate.

#### 3) Affiliate links are generated later (not during search)

When you search products, Content Egg saves the product data first.

Affiliate (short) links are generated **later**, in a **small batch**, when products are **displayed on the frontend for the first time**.

What you may notice:

* The first page load with Lomadee products can be **slower**, because link generation happens during display.
* If the API limit is hit, the plugin will skip link generation for now and try again later.

#### 4) Approval required (admin notice + auto retry)

If you add a product from an advertiser that requires approval, Lomadee may refuse to generate the affiliate link and return a message like:

**“Organization approval is required to generate links.”**

In this case:

* The product can still appear, but it will use the **direct (non-affiliate) URL** until approval is granted.
* You’ll see a **warning notice** in the WordPress admin dashboard.
* The plugin will automatically retry generating the affiliate link **every 24 hours**.

<figure><img src="/files/cYAj2yaxMPA2qlkf7PdZ" alt="" width="375"><figcaption></figcaption></figure>

#### 5) No direct prices/stock updates

The Lomadee API does **not** provide a reliable way to refresh existing items by product ID (to update **price** and **availability** for already saved products).

Recommended workaround:

* Use Content Egg’s [**update by keyword**](/updating-products/updating-the-product-list) feature to periodically re-run the search and refresh the product list.


# Offer module

The Offer module lets you add products to a post **manually** — useful for any merchant that isn't covered by a dedicated module.

### Add a custom product

On the **Added** tab of the product manager, click **+ Add product**. The edit drawer opens in **Add product** mode — fill in the product's details (**Title** and **Product URL** are required) and click **Add product**.

<figure><img src="/files/kx31cvaklAFpZDxdcxVL" alt="Adding a custom product with + Add product on the Added tab"><figcaption><p>+ Add product opens the edit drawer in Add product mode</p></figcaption></figure>

{% hint style="info" %}
You don't need to activate the Offer module first — Content Egg activates it automatically the first time you save a manually added product.
{% endhint %}

{% hint style="info" %}
Use the **direct link** from the product page in the "Product URL" field (without any affiliate-network parameters, which usually come after the "?" symbol). Use the deeplink in a separate field. Read about the deeplink [here](/modules/deeplink-settings).
{% endhint %}

### Global/custom settings

In the example above, we used the deeplink directly in the field. But you can create global deeplinks and XPath for each domain. So if your offer doesn't have a deeplink field, the plugin will use the global settings.

You can also overwrite custom settings by global fields (global settings will have priority)

![](/files/-M4xMt1POVEzyOYdv1aF)

### Price update for Offer module

{% hint style="warning" %}
This is only for advanced users. You must have some basic knowledge about XPath.
{% endhint %}

{% hint style="info" %}
Please note that we don't provide help setting up XPath for your sites, but you can hire us to create custom parsers for Affiliate Egg.
{% endhint %}

Offer module can automatically update prices if you set global/custom [XPath query](https://en.wikipedia.org/wiki/XPath).

### How to get XPath for an Amazon product (example)

1\. The plugin can't detect JavaScript fields, so deactivate it in your browser.

We recommend [Quick Javascript Switcher](https://chrome.google.com/webstore/detail/quick-javascript-switcher/geddoclleiomckbhadiaipdggiiccfje) for Chrome as fast way to enable/disable JavaScript.

![](/files/-M4xOFEErfEatLI0UibY)

2\. You can install the [ChroPath](https://chrome.google.com/webstore/detail/chropath/ljngjbnaijcbncmcnjfhigebomdlkcjo) add-on for Chrome to quickly check XPath.

**How to use ChroPath:**

* Right-click on the web page, and then click Inspect (Ctrl + Shift + I).
* In the right side of Elements tab, click on ChroPath tab.
* To generate XPath selectors, inspect element or click on price node, it will generate the unique relative/absolute XPath selector. Usually, you should use relative selector.

![](/files/-M4xOWXqHKD-Lt3C8YS0)

3\. Sometimes, some sites can have different pages with different designs for product pages.

For example, XPath for deal products will be:

```php
//span[@id='priceblock_dealprice']
```

But XPath for book product pages:

```php
//span[@class='a-size-base a-color-price a-color-price']
```

So, you must merge all xpath into one line with %DELIMITER%. Plugin will try to use each of xpath rules until some rule will work.

**Example for Amazon:**

```php
//span[@id='priceblock_ourprice']%DELIMITER%//span[@id='priceblock_dealprice']%DELIMITER%//span[@class='a-size-base a-color-price a-color-price']
```

### Sites with Microdata markup

{% hint style="success" %}
TIP: Many sites use schema markup and you can try universal XPath query for Microdata:
{% endhint %}

```php
.//*[@itemprop='price']/@content
```

or

```php
.//*[@itemprop='price']
```

![](/files/-M4xQ-2b3jl8TZMELnwf)

### How to check price update?

XPath is used only for price update. It's not in use for parsing initial price, you must add it manually to field.

So, for checking XPath:

* Add some wrong price in Offer price field
* Click on the "Update prices" button to trigger the price update:

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

* Check your price now and possible error:

![](/files/-M4xQHzrAMN1A02Rjjl3)


# Optimisemedia module

{% hint style="danger" %}
WARNING: This module is deprecated ([what does this mean](https://ce-docs.keywordrush.com/modules/deprecatedmodules)).
{% endhint %}

### How to get API Key

1. Create account: <https://www.optimisemedia.com/sign-up/>
2. Log in to your Optimise Network account, follow `My Details` → `Account Details` → `API Key` and find your `API Key` and `Private Key`.

### How to get Affiliate ID

Go to `Content` → `Get Banners`. Search for any banner and check its tracking link. It will look something like this:

```
<a href="http://clk.omgt5.com/?AID=878608&PID=13153&CRID=103375&WID=62635"><img src="http://track.in.omgpm.com/bs/?CRID=103375&AID=878608&PID=13153&WID=62635" border="0" width="1080" height="1080"></a>
```

In this link, you need to copy the `AID=878608` parameter. Your affiliate ID is `878608`.


# Shareasale module

{% hint style="danger" %}
This module is deprecated. ShareASale is shutting down and fully transitioning to the Awin platform. Please use the [AWIN](/modules/affiliate/awin) or [Feed module](/modules/feed-modules) instead.
{% endhint %}

### How to get Token and Secret Key

1. Go to your account on Shareasale, follow `Tools` → `API Reporting`, and set the IP of your server, which you use for the site. You can get the correct server IP from your hosting provider.

![](/files/-M6EnVFxceI3S3NPoBc3)

2. Find `Token` and `Secret Key`, then save the settings.

### How to get Affiliate ID

You can find Affiliate ID in the top left corner of your account, near your login name.

### FAQ

**I am getting this error message: Error: Invalid Account - Error Code 4002 - xx.xx.xx.xx**

![](/files/-M6EofS3_ULP9lmXiNCj)

This means your IP address isn’t registered under `Tools` → `API Reporting` in your Shareasale dashboard. Be sure to register the IP you’re sending API requests from.


# Shopee module

Shopee WordPress Plugin Guide – How to Add Affiliate Products and Monetize Your Site

Shopee is one of the largest e-commerce platforms in **Southeast Asia, Taiwan, and Brazil**. It offers a wide variety of products including electronics, fashion, beauty, home goods, and groceries. Shopee is known for its mobile-first approach, user-friendly app, and frequent promotional campaigns such as flash sales and discount vouchers.

The platform also supports **local sellers and international brands**, making it a popular online marketplace for both buyers and merchants. Additionally, Shopee runs an **affiliate program**, allowing publishers and partners to earn commissions by promoting Shopee products through tracked affiliate links.

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

### How to Get App ID and API Key

1. **Sign up for Shopee Affiliate**\
   Register with the Shopee Affiliate platform for your region:
   * Brazil: <https://affiliate.shopee.com.br>
   * Indonesia: <https://affiliate.shopee.co.id>
   * Malaysia: <https://affiliate.shopee.com.my>
   * Mexico: <https://affiliate.shopee.com.mx>
   * Philippines: <https://affiliate.shopee.ph>
   * Poland: <https://affiliate.shopee.pl>
   * Singapore: <https://affiliate.shopee.sg>
   * Taiwan: <https://affiliate.shopee.tw>
   * Thailand: <https://affiliate.shopee.co.th>
   * Vietnam: <https://affiliate.shopee.vn>
2. **Log in to your Shopee Affiliate dashboard**\
   Use the account you created to access your dashboard.
3. **Go to the Open API section**\
   From your Shopee Affiliate homepage, open the **“Open API”** section.
4. **Generate credentials**\
   In this section, you can create or view your **App ID** and **API Key**.
5. **Add to Content Egg**\
   Copy both values into WordPress → **Content Egg → Modules → Shopee module**, then save changes.

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

{% hint style="warning" %}
**Affiliate links will be generated automatically** through the Shopee API, but you can also use **Deeplinks** from affiliate networks that support Shopee, such as Accesstrade. To do this, [set your Deeplink](/modules/deeplink-settings) in the Shopee module settings of Content Egg, and the plugin will use it to create affiliate links with proper tracking and commission credit.
{% endhint %}

### Shopee Module Details

The **Shopee module** lets you add affiliate products to your WordPress site in two ways:

* **Keyword search** – find products by entering relevant search terms.
* **Direct product URL** – import specific items by pasting their Shopee links.

<figure><img src="/files/70jw7aznF2zPGESUuYx2" alt=""><figcaption></figcaption></figure>

You can also control how many results are displayed per query. The maximum limit is **50 products**.

#### Price Updates

The module supports **automatic price synchronization**.\
For best performance, we recommend running updates via a Cron job instead of triggering them on Page views. Review your preferences in the module settings.

#### Data Available from the Shopee API

Shopee’s API provides only **basic product details**, including the product title, main image, and current price. Extended content such as full descriptions, attributes, or detailed specifications is not included in the API feed.

Despite these limitations, the Shopee module is a **reliable solution for affiliate integration**. You can build product blocks that encourage clicks and conversions, while enhancing your listings with the plugin’s [AI-powered content generation](/ai/content-generation-with-product-import).


# Tradedoubler Products module

### Getting Token

1. Log in to Tradedoubler and add your site (if you didn't do this already).
2. Follow: `Account` → `Manage tokens` and find your Token with the label `PRODUCTS`.


# Tradetracker Products module

### How to get Customer ID and Passphrase

The settings for this module are the same as for the [Tradetracker Coupon](/modules/coupon-modules/tradetrackercoupons) module.


# Trovaprezzi

### How to get your Partner ID

Trovaprezzi does not have a public affiliate program. Please contact the Trovaprezzi team directly to gain access to their affiliate program and your Partner ID.

### How to update product lists

The Trovaprezzi API does not have methods to update existing products. Therefore, it is recommended to use the [auto-update of product listings](/updating-products/updating-the-product-list) feature for this module.

You can use product URLs as keywords:

<figure><img src="/files/0JRMLp9jJ7ENkO3AA1aT" alt=""><figcaption></figcaption></figure>

### Merchant domains

The Trovaprezzi API does not return direct product links or merchant domains. For this reason, you need to add `merchant -> domain` matching pairs manually. Add code like this to your functions.php file:

```php
function my_trovaprezzi_merchant2domain($m2d)
{
        $m2d['Ri Si Electronic'] = 'risielectronic.it';
        $m2d['Jolly Shop'] = 'interteria.it';
        $m2d['Mondoshop'] = 'rmondoshop.it';

        return $m2d;
}

add_filter('cegg_trovaprezzi_merchant2domain', 'my_trovaprezzi_merchant2domain', 10, 1);
```


# Udemy module (deprecated)

{% hint style="danger" %}
**Deprecation Notice: Udemy Affiliate API**

Udemy has officially closed its affiliate API, and as a result, this module is now **deprecated**.
{% endhint %}

### 🔄 Alternative ways to work with Udemy

If you're looking to promote Udemy products, consider the following options:

1. [**Rakuten module**](/modules/affiliate/linkshare)\
   Use the Rakuten module to access Udemy affiliate products.

   > *Note: You must first be approved for the Udemy affiliate program via Rakuten.*
2. [**Content Egg + Affiliate Egg**](/modules/affiliate-egg-integration)\
   Integrate Udemy using Content Egg and Affiliate Egg.

   > *No prior approval is required to add and display Udemy products using this method.*

***

### Obtaining Client ID and Client Secret

To access Udemy's API, follow these steps to obtain your **Client ID** and **Client Secret**:

1. Log in to your [Udemy account](https://www.udemy.com/).
2. Navigate to Edit profile > [API Clients](https://www.udemy.com/user/edit-api-clients/) and click **Request Affiliate API Client**.
3. Once approved, your **Client Id** and **Client Secret** will be available on the same page.

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

{% hint style="warning" %}
**Note:** If you do not see the **Client ID** in your profile, switch your account language to **English** in your Udemy settings.
{% endhint %}

### Generating a Deeplink on Rakuten Advertising

Udemy's affiliate program is available through the **Rakuten Advertising** network. Follow these steps to generate your deeplink:

1. Join the **regional merchant** specific to your target geographic regions. Refer to this [guide](https://partnersupport.udemy.com/hc/en-us/articles/360048655014-How-do-I-Join-the-Udemy-Affiliate-Program) for details.
2. Once approved, navigate to **Links > Link Tools > Deep Links** in Rakuten Advertising.
3. Select **Udemy** as the advertiser and generate your [deeplink](https://ce-docs.keywordrush.com/modules/affiliate/pages/-MTUXEKm5VcN0CRKILEW#id-1.-deeplinks).

![](/files/-M4y5R38nfxIn1R2FMbZ)


# Sovrn (Viglink) module

### Getting API Key and Secret Key

To find your API key and Secret key for a site:

1. Log into the Sovrn Platform.
2. Go to Commerce > Settings > Site.
3. Under Actions, click on the Key to view the API keys for that site.
4. If no secret key has been created, click on "Generate Secret Key".

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

### Price comparison

The module allows you to search for a specific product in the Sovrn database and obtain all offers for that product. You simply need to provide a product URL from any supported retailer.

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

### Price filter

Sovrn API provides a simple search function that returns all products with keywords in the product title. To find the desired product, it is recommended to add a filter by price.

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

### Merchnat domains

Unfortunately, the Sovrn API does not return direct product URLs or merchant domains. As a result, some merchant domains may not be detected correctly. To resolve this, add the following code to your `functions.php` file with merchant-to-domain pairs like this:

```php
function my_viglink_merchant2domain($m2d)
{
    $m2d['Verizon'] = 'verizon.com';
    $m2d['Lowe\'s'] = 'lowes.com';
    $m2d['Dell'] = 'dell.com';

    return $m2d;
}

add_filter('cegg_viglink_merchant2domain', 'my_viglink_merchant2domain');
```


# Walmart module

### How to Get API keys

Walmart no longer releases new API keys. If you do not have your API key, leave this field empty.

### How to get Impact Publisher ID

Walmart doesn't have its own affiliate network, so it uses Impact Radius. You can find your Publisher ID in the top-right corner of your Impact [Radius Network account](https://app.impact.com/login.user).

![](/files/-M4y6w1N_gC7NoOvvdYk)


# Webgains module

⚠️ Deprecated

The **Webgains module is deprecated** and no longer actively maintained.

Please use the more flexible **Feed module** instead, which fully supports Webgains feeds and is compatible with **any standard CSV feed**.

👉 Learn more: [Feed modules](/modules/feed-modules)


# Feed modules

Load a merchant's CSV, XML, or JSON product feed into WordPress and use its products anywhere in Content Egg.

If your merchant or affiliate network provides a **product feed** — a CSV, XML, or JSON file listing their catalog — a Feed module imports it into WordPress so you can use those products throughout Content Egg. Many networks (Awin, CJ, Rakuten/LinkShare, Tradedoubler, and others) offer such feeds.

### Where your products go after import

Setting up a feed loads its products into a **local product library** in your WordPress database. They're stored and searchable — but **not published as posts on their own**. From there, you choose how to use them:

* **Insert products as you write.** In the post editor, search your feed's products (just like any other Content Egg module) and add them to a specific post as product blocks. Best when you hand-pick a few products per article.
* **Bulk-create posts with Feed Import.** The [Feed Import tool](/set-up-products/import-tools/feed-import) turns *every* product in the feed into its own post or WooCommerce product. Best for publishing a large catalog automatically.

{% hint style="info" %}
You don't have to use Feed Import. If you only want to feature selected products, skip it and add products from the editor instead.
{% endhint %}

You can also build a [price comparison](/modules/feed-modules/price-comparison-based-on-feeds) across merchants by EAN, or add feed offers to existing posts with the [Fill tool](https://ce-docs.keywordrush.com/set-up-products/fill-tool).

### In this section

* [**Adding a feed**](/modules/feed-modules/general-information) — the setup wizard, supported formats and URLs, and how syncing works.
* [**Field mapping**](/modules/feed-modules/field-mapping) — match feed columns to product fields (CSV, XML/XPath, regex).
* [**Importing products as posts**](/modules/feed-modules/mass-import) — bulk-publish a whole feed with the Feed Import tool.
* [**Price comparison based on feeds**](/modules/feed-modules/price-comparison-based-on-feeds) — merge offers from multiple merchants by EAN.
* [**Troubleshooting**](/modules/feed-modules/troubleshooting) — fixes for parsing, downloads, and detection.


# Adding a feed

Set up a CSV, XML, or JSON feed with the setup wizard.

Content Egg includes a dedicated module for working with product feeds in **CSV**, **XML**, or **JSON** format. This page covers adding one with the setup wizard, the feeds and URLs it supports, and how the feed keeps itself in sync afterward.

### The setup wizard

Go to `Content Egg > Modules` and click **Add a Feed** to open the setup wizard.

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

1. **Paste the feed URL.** That's the only thing you need to enter on this step. The wizard downloads a sample and automatically detects the format, encoding, currency, merchant domain, and CSV/decimal settings — you don't need to know any of this in advance.

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

2. **Map the fields.** The plugin already fills in some of the mapping deterministically, based on common feed field names. Real sample rows from your feed are shown next to the mapping panel, along with a live preview of the first product, so you can confirm everything looks right. Click **Map with AI** to have the AI assign the remaining fields, or finish mapping any field manually.

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

3. **Confirm and import.** Give the feed a name, choose how often it should sync, then click **Save & import products**. The import runs in the background with a live progress view, so you can leave the page and come back once it's done.

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

{% hint style="info" %}
If the wizard can't detect your feed's parameters correctly, click **Set up manually** in the top-right corner of the page. This takes you straight to the classic module settings page, where you can enter every setting by hand.
{% endhint %}

{% hint style="info" %}
Once the import finishes, your products live in a local library, ready to use. See [where your products go](/modules/feed-modules#where-your-products-go-after-import) for what to do next.
{% endhint %}

### Supported feeds & URLs

* **Direct access**: The feed must be reachable at a direct, live URL — no login page or authorization step in front of it.
* **Formats**: CSV, XML, and JSON are supported. CSV is recommended when available, for better performance and simpler configuration.
* **Archives**: ZIP and GZ (GZIP) are supported. The wizard detects compression automatically; when setting up manually, select the matching **Archive format** option.
* **Protocols**: `http://`, `https://`, `ftp://`, and `ftps://` URLs are all supported.

{% hint style="warning" %}
To process **large** ZIP-compressed feeds, make sure ZIP support is enabled on your server.
{% endhint %}

<table><thead><tr><th width="247.16015625">Type</th><th>Example</th></tr></thead><tbody><tr><td><strong>HTTP / HTTPS</strong></td><td><p>http://www.example.com/data.csv</p><p>https://www.example.com/data.zip</p></td></tr><tr><td><strong>FTP (anonymous)</strong></td><td>ftp://ftp.example.com/path/to/feed.xml</td></tr><tr><td><strong>FTP (with login &#x26; password)</strong></td><td><p>ftp://user:pass@ftp.example.com/path/to/feed.xml</p><p>ftp://user:pass@aftp.linksynergy.com/12345_123456_mp.xml.gz</p></td></tr><tr><td><strong>FTP (encoded credentials)</strong></td><td><p>ftp://user:pass%40123@ftp.example.com/path/to/feed.xml.gz</p><p><code>(%40 = @, %3A = :, %2F = /)</code></p></td></tr><tr><td><strong>FTPS (secure FTP)</strong></td><td>ftps://user:pass@secureftp.example.com/path/to/feed.xml</td></tr></tbody></table>

{% hint style="warning" %}
In the Pro version you can enable up to **50** individual feed modules, and you can use merged feeds that combine products from multiple merchants (available in many affiliate networks). Avoid very large single feeds — splitting them keeps performance optimal.
{% endhint %}

### How syncing works

1. **Loading the feed file:** The feed file is downloaded to your server and cached. An unchanged feed is not re-downloaded or reprocessed on the next sync.
2. **Importing offers:** The plugin imports offers into the local database. Imports always run in the background, so saving settings or reloading a feed never blocks the page.
3. **Product search:** You can search feed products as you would in any other Content Egg module. If an import is still running, search shows a "please wait" message until it completes.
4. **Regular syncs:** By default, feed data is considered stale after 12 hours. The plugin re-syncs it in the background the next time that data is actually requested (e.g. someone views a page or admin screen using it) — not on a fixed clock. On a very low-traffic site, a refresh may take longer than 12 hours if nothing requests the feed in the meantime. You can change this interval (from every hour up to once a week) in the wizard's last step or in the module settings — both control the same **Feed sync interval** option.
5. **Adding more feeds:** Each feed is a separate module — repeat the steps above from `Content Egg > Modules`.

### Video walkthrough

{% hint style="info" %}
This walkthrough predates the current setup wizard, so the interface looks different — it's still a useful overview of the overall workflow.
{% endhint %}

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


# Field mapping

Product feeds can vary significantly in structure, depending on the source or affiliate network. To ensure accurate data import, each feed must be mapped to Content Egg’s internal product fields. This process is required for **every individual feed**.

### Automatic Field Mapping

You rarely have to map fields by hand. When [adding a new feed](/modules/feed-modules/general-information#the-setup-wizard), the setup wizard already fills in some fields for you automatically, based on common feed field names — this is a deterministic match, not AI. For anything it couldn't confidently match, click **Map with AI** to fill in the rest, or finish mapping any remaining field manually. Real sample rows from your feed and a live product preview sit right next to the mapping panel, so you can confirm everything looks right before importing anything.

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

{% hint style="info" %}
The **Map with AI** button is disabled until an **OpenAI API key** is added under `Content Egg > Settings > AI`.
{% endhint %}

The rest of this page covers the mapping syntax in more detail — useful when editing an existing feed's mapping directly in the module settings, or when you need an XPath/regex expression the wizard's dropdowns don't offer.

### CSV Feeds Mapping

Match each column header from your feed to the appropriate plugin field:

![](/files/-MV0yxevanSgrYEQJ08k)

**Common CSV Field Mappings:**

| Plugin Field     | Description                                                                              |
| ---------------- | ---------------------------------------------------------------------------------------- |
| `id`             | **Required.** Unique identifier for each product. Must remain consistent across imports. |
| `affiliate link` | The product's affiliate URL, including your tracking parameters.                         |
| `is in stock`    | Stock status. Supported values: `1`, `true`, `on`, `yes`, `0`, `false`, `off`, `no`      |
| `availability`   | Text-based stock status. Supported values: `in stock`, `out of stock`                    |
| `direct link`    | Direct (non-affiliate) URL to the original product page                                  |
| `gtin`           | Global Trade Item Number, such as EAN-13 (e.g., `3001234567892`)                         |

{% hint style="info" %}
Some fields are required, such as `id`, while others are optional. However, including more fields improves matching, filtering, and comparison quality.
{% endhint %}

{% hint style="info" %}
The wizard shows these same explanations as an **(i)** icon next to each field in the mapping panel, so you don't need to come back to this table while setting up a new feed.
{% endhint %}

### XML Feeds Mapping

{% hint style="warning" %}
**Tip:** If XML parsing fails, try switching the **XML processor** to **XmlReader** in the module settings.\
XmlReader handles nested and complex XML structures more reliably.
{% endhint %}

If your feed is in **XML format**, you'll map fields using either XML node names or XPath expressions — the same syntax works whether you're mapping in the wizard or the classic settings form:

![](/files/-Me3oSm37MmS9uhR3EOq)

**Example: Node Attribute Mapping**

You can directly select attributes from a node. For example:

```xml
<product>
    <image url="https://example.com/image.jpg" />
</product>
```

You can map the image URL using:

<pre><code><strong>//image/@url
</strong></code></pre>

**Example: Using XPath for Namespaced Nodes**

For more complex XML structures or namespaced elements, XPath expressions are supported:

```xpath
.//*[local-name()='media:thumbnail']/@url
```

This XPath selects the `url` attribute of a `<media:thumbnail>` element, even if it uses a namespace.

### Extract Data with Regex

You can extract specific data from a feed field using a custom syntax that incorporates a regex pattern:\
**`[regex][pattern][feed_field_name]`**

This allows you to define a pattern to match and extract the desired portion of the data within the specified feed field.

**Example Use Case:**

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

Consider a feed containing a **"fields"** field that combines multiple pieces of product data. To extract the value of a specific key, such as **"from\_price"**, you can use the following syntax:

```plaintext
[regex][/from_price:([\d.]+) EUR/][fields]
```

**Explanation:**

* **`[regex]`**: This indicates you are using a regex-based extraction.
* **`/from_price:([\d.]+) EUR/`**: The regex pattern to match.
* **`[fields]`**: The feed field from which data will be extracted.

Use capturing groups **`()`** to define the exact portion of the match you want to extract.

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

### Product Attributes

You can map any fields from your CSV feed as product attributes, which can then be used to import WooCommerce attributes or display attributes via shortcode.

<figure><img src="/files/eLaVfl41M8lpp5TcbCa1" alt="" width="375"><figcaption></figcaption></figure>

For example, if your feed includes columns like `delivery_weight` and `delivery_time` that you want to map as attributes, add them to the "attributes" mapping settings as follows:

`delivery_weight,delivery_time`

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

These fields will then appear as product attributes:

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

To customize their display names, update the "attributes" mapping like this:

`delivery_weight->Delivery Weight,delivery_time->Delivery Time`

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

The result will appear as shown:

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


# Importing products as posts

Setting up a feed loads its products into your local database, but doesn't publish anything on its own. When you want a **separate post or WooCommerce product for every item in the feed**, use the **Feed Import** tool — it queues the whole feed with a single click.

{% hint style="info" %}
This step is optional. To feature only selected products, skip Feed Import and add products directly from the post editor instead.
{% endhint %}

Full guide:

{% content-ref url="/pages/sDAijk4TAIJHDK7X7B8n" %}
[Feed Import](/set-up-products/import-tools/feed-import)
{% endcontent-ref %}

### Watch feed import in action

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


# Price comparison based on feeds

If your feeds include an EAN field for all products from different merchants, you can build a price comparison using the [Autoblog](https://ce-docs.keywordrush.com/set-up-products/autoblogging) or [Fill](https://ce-docs.keywordrush.com/set-up-products/fill-tool) feature. All products with the same EAN will be [merged together](https://ce-docs.keywordrush.com/set-up-products/price-comparison-websites#search-by-ean).

Don’t forget to add a shortcode to the body of your post to show the price comparison list, or use the special Content Egg product layouts from compatible themes.

![](/files/-MV15TQZAuXbravOnsvG)

You can use the [Fill tool](https://ce-docs.keywordrush.com/set-up-products/fill-tool) if you want to add offers to your existing products.

![](/files/-MV15dGoxtasIEkDkku0)


# Troubleshooting

Fixes for feeds that won't import, parse, or download correctly.

## First checks

Start here whenever a feed isn't behaving as expected.

#### 1. Verify the import

Open the **Feed Module Settings** page and confirm the feed shows a **Ready** status with a product count. This is where you see the current state, the last import result, and the cached feed file.

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

#### 2. Check the field mapping

Review your field mappings and fix any missing or incorrect fields. At minimum, the required `id` field must be mapped.

<figure><img src="/files/5VF6m7DPji7ihBVgbm9s" alt=""><figcaption></figcaption></figure>

#### 3. Reload the feed data

Click **Reload Feed Data Now** (in the Feed Status panel shown in step 1) to re-sync the products from the feed into the local database. The import runs in the background, so this won't block the page — check back on the same settings page for progress and the result.

{% hint style="info" %}
Changing any module setting also triggers an automatic re-sync.
{% endhint %}

#### 4. Clear the cached feed file

The feed file is cached and reused between syncs to avoid unnecessary downloads. If the source changed in a way that reloading doesn't pick up, click **Clear** next to **Cached feed file** in the Feed Status panel (see the screenshot in step 1), then reload the feed data.

## Common problems

#### XML feed won't parse ("Premature end of data", "Unable to load XML source")

Usually the **product node** is wrong, or the feed nests the product element inside itself (some networks put a click URL as `<product>…<URL><product>…</product></URL>…</product>`, which the default parser can't read).

* Feeds added through the **wizard** handle this automatically — it detects the right product node and switches the parser when needed.
* For a feed set up manually (or one that still fails), open module settings and switch the **XML processor** to **XmlReader**, then reload. XmlReader handles nested and complex XML more reliably.
* Also confirm the **Product node** is the element that repeats once per product (e.g. `product`, `item`).

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

#### Wrong or empty product fields (wrong product node)

If the sample shows only one field, or products import with missing data, the wrong XML **product node** was detected.

* In the wizard, edit the **Product node** field and click **Re-scan fields** — the sample re-parses so you can confirm it looks right before importing.
* For an existing feed, set the correct **Product node** in module settings and reload.

#### FTP feed won't download

* URL-encode any special characters in the username or password: `@` → `%40`, `:` → `%3A`, `/` → `%2F`. For example, the password `pass@123` becomes `pass%40123`.
* Make sure the URL points to a **file**, not a directory (it must not end in `/`).
* Confirm your host allows **outbound FTP** connections — some managed hosts block them.

#### Wrong currency

The wizard detects the currency from the sample. If it guessed wrong (for example, a feed with no currency field), set the correct currency in the wizard's last step or in module settings, then reload.


# Coupon modules


# Admitad Coupons module

### Getting XML-file URL

1. To get the XML-file URL, first [create your account](https://www.keywordrush.com/go/admitad).
2. Log in to Admitad, follow `Tools` → `Coupons` → `Export` → `Get URL` to get the XML file.

{% hint style="info" %}
You can search with filters; all search parameters will be added to the URL of the XML file.
{% endhint %}

{% hint style="success" %}
Don't forget to tick **`Only my programs`** to get commissions from your programs.
{% endhint %}

Instead of keywords, you can search by **advertiser ID** to return all coupons for that advertiser.

<figure><img src="/files/3TTFxSSjB6LXMPrR7QMI" alt=""><figcaption></figcaption></figure>


# CJ Links module

{% hint style="info" %}
You can use this module to search for coupons and text links. Use [CJ Products](/modules/affiliate/cjproducts) module to search for products.
{% endhint %}

### Getting Personal Access Token

A Personal Access Token is a unique identification string for your account. Personal Access Tokens allow for secure authentication when accessing the CJ APIs.

You can manage your personal access tokens from the [personal access tokens](https://developers.cj.com/account/personal-access-tokens) page.

![](/files/-M4t9t_ZOBRvp_0BFq9V)

### Getting Website ID

1. Log in to your CJ account.
2. Follow `Account → Websites` and find the ID of your site:

![](/files/-M4tA7GR6061JRLjPg9D)


# Coupon module

The Coupon module lets you add coupons to a post **manually**.

On the **Coupons** tab of the product manager, click **+ Add coupon**. The edit drawer opens in add mode — fill in the coupon's details (**Title** and **URL** are required) and click **Add coupon**.

<figure><img src="/files/kRJpwliyNTfwjGjwOyr5" alt="Adding a coupon manually with + Add coupon on the Coupons tab"><figcaption><p>+ Add coupon opens the edit drawer in add mode</p></figcaption></figure>

{% hint style="info" %}
You don't need to activate the Coupon module first — Content Egg activates it automatically the first time you save a manually added coupon.
{% endhint %}


# Lomadee Coupons module

### Getting Source ID

1. Use your existing account or [create a new account](https://sso.lomadee.com/register.html).
2. Log in to Lomadee. Go to `Tools` → `IDENTIFICATION CODES` and find your `Source Id`.

![](/files/-M4xJBJOPO59xSqp9FEw)


# Skimlinks Coupons module

### How to get Public Key, Account Type, Account ID

1. Use your existing account or [create a new account](http://www.keywordrush.com/go/skimlinks).
2. To authenticate with the Skimlinks Merchant API, you first need to apply for an API key. You can do so by logging in to the [Publisher Hub](http://www.keywordrush.com/go/skimlinks) and requesting approval under `Toolbox` → `API Authentication credentials`.
3. Once you are approved, the same page will display your `Public Key`, your `Account Type`, and your `Account ID`.

![](/files/-M4y10GbrffwkmRfAWgH)

{% hint style="info" %}
You can search for coupons and offers by keywords or domain name.
{% endhint %}

![](/files/-M4y1B8iZq3eHPR50gTw)


# Tradedoubler Coupons module

### Getting Token

1. Log in to Tradedoubler and add your site (if you didn't do this already).
2. Follow: `Account` → `Manage tokens` and find your Token with the label `VOUCHERS`.


# Tradetracker Coupons module

### How to get Customer ID and Passphrase

1. Log in to Tradetracker.
2. Go to `Creatives` → `Web Services` and find `Customer ID` and `Passphrase` in the right-side column. Sometimes you need to get access to this panel — click `«request access»`.

![](/files/-M4y2az1w-CMgcOinT7m)

### How to get Affiliate Site ID

1. Log in to your account and add your site.
2. Follow `Account` → `My Sites`. The ID (without #) next to your site name is your `Affiliate Site ID`.

![](/files/-M4y2yMGSwbpsVcm5Psz)


# Media modules

Bring free images and videos into your content from stock media services.

Media modules pull free **images** and **videos** into your posts from stock and media services. There are two families:

* **Image modules** — Pixabay, Pexels, Unsplash, Flickr, Google Images, Bing Images.
* **Video modules** — YouTube, Pexels Videos.

Activate a media module like any other and enter its API key where required. Then add images or videos to a post from the **Content Egg** panel using its **Images** or **Videos** tab, and display them with the **CE Images** and **CE Videos** blocks. The workflow is the same as for products — see [Add & manage products](/set-up-products/how-to-add-products) and [How content is displayed](/frontend/how-content-is-displayed).

{% hint style="info" %}
The older text-oriented "content" modules (Related Keywords, RSS Fetcher, Twitter, and similar) are deprecated and have been removed.
{% endhint %}


# Bing Images module

### Getting Subscription Key

1\. Go to Microsoft Cognitive Services: <https://azure.microsoft.com/en-us/try/cognitive-services/?api=bing-image-search-api>.

2\. Click on `Get API Key` and subscribe to `Bing Search API`. Follow the on-screen instructions to register for a subscription key.

![](/files/-M4dg6NawGi06ccLg2br)

3\. Find your `Subscription key` for Search API.

![](/files/-M4y8gUNbJSf9GCIh-1R)

{% hint style="info" %}
You can set several keys separated by commas so that the plugin will use a random key for each request.
{% endhint %}


# Flickr module

### Getting API key

1. If you don't have a Yahoo account, first create one: <https://edit.yahoo.com/registration>
2. To obtain the key, go to: <https://www.flickr.com/services/apps/create/apply>
3. Fill in the form on your own.
4. At the final stage you will have access to your API Key:

![](/files/-M4y9KVqu9R-luNVL5cc)

{% hint style="info" %}
“Noncommercial” keys are issued automatically, while “commercial” keys take a long time to be reviewed.
{% endhint %}


# Google Images module

### Getting Your Search Engine ID

Follow these steps to set up a Google Custom Search Engine (CSE):

1. **Create a Custom Search Engine**

   * Go to [Create a new CSE](https://cse.google.com/cse/create/new).
   * Select **Search the entire web**.
   * Enable **Image search**.
   * Click **Create**.

   <figure><img src="/files/DKJ8eb5dh2CRFQXM1WIO" alt="" width="375"><figcaption></figcaption></figure>
2. **Get Your Search Engine ID**
   * On the next screen, click **Customise**.
   * Locate your **Search engine ID**.
   * Copy and save this ID in the module settings.

<figure><img src="/files/pkGbcoQ5HF0YIRZD61tJ" alt="" width="375"><figcaption></figcaption></figure>

### Getting an API Key

1. **Open the Google API Console**
   * Visit [Google API Console](https://console.developers.google.com/).
2. **Create a Project**

   * If you do not have a project, click **API Project** → **New Project**.
   * Enter a name and click **Create**.

   <figure><img src="/files/FNolDCBCCLaqdWJbBRif" alt="" width="375"><figcaption></figcaption></figure>
3. **Enable the Custom Search API**

   * In the left menu, go to **Library**.
   * Search for **Custom Search API**.
   * Click **Enable**.

   <figure><img src="/files/NuP89Qc7QYvlqGgUhV8Z" alt="" width="375"><figcaption></figcaption></figure>
4. **Create an API Key**

   * Go to **Credentials** in the left menu.
   * Click **Create credentials** → **API key**.
   * Copy and store the generated key.

   <figure><img src="/files/IzdDq84eN3bDHrRIMVF5" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:** The JSON/Atom Custom Search API provides 100 search queries per day for free. To increase this limit, enable billing in the Google API Console.
{% endhint %}


# Pexels module

The Pexels integration ships as two modules — **Pexels** (photos) and **Pexels Videos** — and both use the same API key.

### Getting API Key

1. Create a free account on Pexels: <https://www.pexels.com/join/>
2. Go to the API page and request access: <https://www.pexels.com/api/>
3. Open your API dashboard and copy your `API Key`: <https://www.pexels.com/api/new/>
4. Paste the key into the module settings (enter it in both the Pexels and Pexels Videos modules).

{% hint style="info" %}
The API is free with a default rate limit of **200 requests per hour** and **20,000 requests per month**. You can request a higher limit from Pexels if you need it.
{% endhint %}

{% hint style="info" %}
Attribution is not required by the Pexels license, but crediting the photographer and Pexels is always appreciated.
{% endhint %}


# Pixabay module

### Getting API Key

1. Make an account on Pixabay: <https://pixabay.com/accounts/register/>
2. Log in to your account.
3. Go to this link: <https://pixabay.com/api/docs/>. Scroll down and find your `API Key`, as shown in the image:

![](/files/-M4yFNnIxo68Lr4VgSxH)


# Unsplash module

### Getting Access Key

1. Create a free account on Unsplash: <https://unsplash.com/join> and confirm it through the verification email Unsplash sends you.
2. Register a new application: <https://unsplash.com/oauth/applications>
3. Accept the API use terms, then fill in your application name and description.
4. Open your application and copy the `Access Key`.

{% hint style="warning" %}
Register your application **only after** you have confirmed your new account through the verification email. Until your email is verified, Unsplash does not let you create an application.
{% endhint %}

{% hint style="info" %}
New applications start in Demo mode with a default rate limit of **50 searches per hour**.
{% endhint %}


# Pexels Videos module

The Pexels Videos module adds free stock **videos** from [Pexels](https://www.pexels.com/) to your posts.

### Getting an API key

1. Register for a free Pexels API key at [pexels.com/api](https://www.pexels.com/api/).
2. In **Content Egg → Modules**, activate **Pexels Videos** and paste your API key.

{% hint style="info" %}
Pexels Videos uses the same Pexels API key as the Pexels (images) module.
{% endhint %}

### Notes

* The video file is always hotlinked from Pexels. Optionally, the video's poster image can be saved to your server (a module setting).
* Add videos to a post from the **Videos** tab of the Content Egg panel, and display them with the **CE Videos** block.


# Youtube module

### Getting API Key

1\. Go to the Google API console (you must have a registered Google account): [https://console.developers.google.com](https://console.developers.google.com/)

2\. If you have not created a project in the API console yet, create it now:

![](/files/-M4yAYfcNgaWnUB2TWgb)

3\. Go to `Your project` → `APIs & Auth` → `APIs`, search for the YouTube API in the list of available APIs, and activate it:

![](/files/-M4yJFNy7R-HXtAVxLES)

![](/files/-M4yJLT9dS1vl_XBBf-i)

4\. Go to `Your project` → `Credentials`. If you have not created an `API Key` yet, create it now:

![](/files/-M4yJg0OwmwJakabfOPQ)

![](/files/-M4yJlF1jIcQMB4fi-xt)

{% hint style="warning" %}
Don't set IP-address limits for the API key. If you do, use your server's external IP address (not your local IP).
{% endhint %}


# Module cloning

All affiliate modules include a feature that allows you to clone a module, effectively creating a duplicate of the parent module.

{% hint style="success" %}
You can create **up to 10 cloned modules** for each parent module.
{% endhint %}

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

This feature is useful when:

* Creating separate modules for different locales (e.g., Amazon US, UK, IT, FR).
* Setting up distinct modules with unique product search filters.

### How to Clone a Module

To create a cloned module:

1. Navigate to the module settings page.
2. Click the **"Clone This Module"** button.

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

### How to Delete a Cloned Module

{% hint style="danger" %}
**Warning:** Deleting a cloned module will permanently remove its settings and all associated products from all posts. This action cannot be undone.
{% endhint %}

If you no longer need a cloned module, you can delete it:

1. Go to the settings page of the cloned module.
2. Click **"Delete This Module."**

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


# Deprecated modules

Affiliate networks may occasionally close their APIs. When this happens, we mark the module as "deprecated." Existing products will remain on your website for as long as you wish, but you won't be able to add new ones, and prices will no longer be updated. We recommend using alternative modules.

![](/files/-MTUP7sld3omLEaAaeHB)


# My network isn't listed

What if your advertiser is not yet supported?

Not all affiliate networks offer product APIs, which means direct integration into the plugin as separate modules is not possible. However, there are still ways to work with almost any affiliate program. Below, you will find several methods to accomplish this.

### 1. Affiliate Egg integration

[Affiliate Egg](https://www.keywordrush.com/affiliateegg) retrieves data directly from the store's website without needing an API. You [can activate](/integrations/affiliateeggintegration) Affiliate Egg parsers as separate modules within the Content Egg plugin. Additionally, we [can create custom parsers](https://ce-docs.keywordrush.com/modules/affiliate-egg-integration#how-to-order-custom-parsers) tailored to your specific merchants.

![](/files/-MTURJ8gH4eNCxXUOBjI)

{% content-ref url="/pages/-MTUR8LzwpnWFrWLf5q3" %}
[Affiliate Egg integration](/modules/affiliate-egg-integration)
{% endcontent-ref %}

### 2. Feed modules

If your merchant provides a CSV/XML product feed, you can utilize Feed modules. Check if such a feed is available within your affiliate network.

{% content-ref url="/pages/-MUsIUexKR7xniUsTHce" %}
[Feed modules](/modules/feed-modules)
{% endcontent-ref %}

### 3. Offer module

You can use the Offer module to manually add any products.

![](/files/-MTUSgJq5fl0dTFDS4H-)

{% content-ref url="/pages/-M4jZ\_kuQYziFGEUjxm2" %}
[Offer module](/modules/affiliate/offermodule)
{% endcontent-ref %}


# Affiliate Egg integration

[Affiliate Egg](https://www.keywordrush.com/affiliateegg) is a companion plugin that reads product data straight from store websites — **no API and no data feed required**. With the integration you can **connect almost any online store** as a Content Egg module and use it like any other module: keyword search, direct URLs, price updates, comparisons, templates and blocks.

* **No API required** — extract price, image, stock and more directly from the store page.
* **Almost any store** — connect a supported shop, or **any custom domain** by its address.
* **Custom parsers** — order a hand-written parser for stores that need one (see [Ordering a custom parser](#ordering-a-custom-parser)).
* **Full Content Egg power** — price updates, price comparison, product import, templates and blocks all work with connected stores.

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

{% hint style="info" %}
New to the difference between our plugins? Read [Content Egg vs Affiliate Egg vs External Importer](https://ei-docs.keywordrush.com/integration/ei-vs-ce-vs-ae).
{% endhint %}

### Requirements

* The [Affiliate Egg](https://www.keywordrush.com/affiliateegg) plugin is **installed, activated, and has a valid license**.
* **Affiliate Egg 11.0.0 or newer** to connect custom (unregistered) domains.

### Connect a store

![The "Connect a store" button on the Modules page](/files/yYcYV8ynOCL0Cu8weD9q)

1. Go to **Content Egg → Modules** and click **Connect a store** in the *Affiliate Egg modules* section.
2. Enter the **shop domain** (for example `example.com`).
3. *(Optional)* Enter a **Search URL** to enable keyword search — see [Search URL](#search-url). Leave it empty to work with direct product and category URLs only.
4. Click **Connect**. You're taken to the new module's settings, and the module is **active by default**.

![The "Connect a store" modal](/files/HuVsvb2BJt75f9yJCdXr)

### Add products to a post

Open a post and find the connected store in the Content Egg metabox. There are three ways to add products:

* **Direct product URL** — paste a product page URL. **Recommended:** it's the most reliable and uses the fewest requests to the store.
* **Category / listing URL** — paste a category URL to pull several products from it.
* **Keyword search** — type a keyword. Requires a Search URL.

![Searching a connected store from the post editor](/files/aZNVcMZNBqHmyyB8lQ7o)

{% hint style="info" %}
Prefer **direct product URLs** over keyword search whenever you can — fewer requests to the source site means less chance of being blocked.
{% endhint %}

### Module settings

Open the module's settings page (**Content Egg → Modules → \[your store]**) to configure:

* **Affiliate link (Deeplink)** — turn direct product links into your affiliate links. You can change this at any time to switch networks. See [Deeplink settings](https://ce-docs.keywordrush.com/modules/deeplink-settings).
* **Results** — how many products a keyword search returns.
* **Save images** — store product images on your own server.
* **Update frequency** — how often prices and availability refresh.

### Search URL

A Search URL lets a **custom domain** module search by keyword. To build one:

1. On the store's website, search for any product — say, `shoes`.
2. Copy the URL from your browser's address bar.
3. Replace your search word with **`%KEYWORD%`**.

So a search that looks like this:

```
https://example.com/search?q=shoes
```

becomes:

```
https://example.com/search?q=%KEYWORD%
```

* If you paste a normal search URL (for example `?q=bike`), Content Egg tries to insert `%KEYWORD%` for you automatically.
* No Search URL? The module still works with **direct product and category URLs** — only keyword search is unavailable.

{% hint style="warning" %}
Some stores render their search results with JavaScript, which a parser can't read. If keyword search returns nothing, use a **direct product URL** instead.
{% endhint %}

### Ordering a custom parser

**Why you might need one.** Custom-domain modules use Affiliate Egg's generic parser, which reads most modern stores. But some shops have unusual markup the generic parser can't understand — when that happens a search shows **"No product data found — this shop likely needs a custom parser."** A custom parser is hand-written for that specific store, so it reads its products reliably.

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

**Process:**

1. **Email us** your list of stores through the [contact form](https://www.keywordrush.com/contact).
2. **Invoice** — we review your list and send you an invoice.
3. **Creation** — it usually takes 1–2 days.

**Installation:**

* Copy the parser files to your server's `/wp-content/affegg-parsers/` directory.
* Custom parsers work exactly like the built-in ones — connect the store the same way as above.

**Guarantee:** 6 months. If a parser needs corrections during that time, we make them for free.

### Troubleshooting

When a search can't return products, Content Egg shows a short explanation in the metabox. Here's what each message means and how to resolve it:

| Message                                            | What it means                                                    | What to do                                                                                                                        |
| -------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Blocked by the site** (503 / 403)                | The store is blocking automated requests.                        | Enable a [scraping service](https://ae-docs.keywordrush.com/extractor-settings); slow down price updates; add products gradually. |
| **No product data found — needs a custom parser**  | The generic parser couldn't read the product page.               | [Order a custom parser](#ordering-a-custom-parser) for this store.                                                                |
| **No products found — try a direct product URL**   | Keyword search returned nothing, often a JavaScript search page. | Paste a direct product URL instead.                                                                                               |
| **Keyword search isn't set up / Add a Search URL** | No keyword search is configured for this store.                  | Use a direct URL, or add a [Search URL](#search-url) in the module settings.                                                      |
| **That URL is for a different store**              | The URL's domain doesn't match this module.                      | Enter a URL from the connected store, or a keyword.                                                                               |
| **The store took too long to respond**             | The request timed out.                                           | Try again, or enable a scraping service.                                                                                          |
| **Your session has expired**                       | The editor was left open past the login token's lifetime.        | Reload the page and search again.                                                                                                 |

#### Avoid getting blocked

Affiliate Egg makes a separate HTTP request for each product search and price update. Sites with anti-bot protection or per-IP rate limits can return **503** or **403** errors if you make too many requests.

A block usually lifts after 24 hours. To avoid it in the first place:

* [x] **Search by direct product URL** instead of keywords (most important).
* [x] **Limit price updates** — avoid very frequent update schedules.
* [x] **Add products gradually** — don't import too many at once.
* [x] **Use a scraping service** for a persistent block — see [Extractor settings](https://ae-docs.keywordrush.com/extractor-settings).

### FAQ

**Why do I need Affiliate Egg if I have Content Egg?**

Not every store with an affiliate program offers a product API — smaller shops especially. Affiliate Egg reads the data directly from the site, so you can promote stores Content Egg doesn't support natively. If a store needs it, we can also build a custom parser for you.

**Which stores can I connect?**

Almost any online store — supported shops out of the box, and any other domain via the generic parser (Affiliate Egg 11.0.0+). A few stores may need a custom parser.

**Direct URL or keyword search — what do you recommend?**

Direct product URLs whenever possible. They're more reliable and make fewer requests to the store, which lowers the risk of being blocked.

**Amazon is in both plugins — which should I use?**

Prefer Content Egg's Amazon module. Amazon's API is fast and stable, while intensive web parsing can get your IP blocked.


# Deeplink settings

Deeplinks allow you to convert a direct product URL into a trackable affiliate link. This mechanism ensures that your affiliate program tracks clicks correctly and rewards you with commissions for sales. Most affiliate networks use one of two methods to generate affiliate links. Below, you'll find detailed explanations and setup instructions for each.

{% hint style="success" %}
**AI Helper: Generate Your Deeplink Automatically**

You can now use our **specialized GPT assistant** to generate correct Deeplink templates.

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

Simply:

1. Paste your sample affiliate link(s) from your network dashboard.
2. The assistant will detect your format and build a proper Deeplink template for Content Egg.
3. Copy the suggested template into your **Deeplink Settings**.
   {% endhint %}

### 1. Deeplink-Based Affiliate Links

Many affiliate networks (e.g., AWIN, ShareASale, CJ) use **Deeplink redirects**. These links first route the visitor through the affiliate network's servers for tracking purposes before redirecting them to the actual product page.

#### Example of a Deeplink:

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

As you can see, a Deeplink typically has **two components**:

* The **affiliate network’s tracking script**.
* The **encoded product URL** from the advertiser’s website (percent-encoded format).

![](/files/-MTUaZXnBze9L0C0ngFF)

{% hint style="info" %}
You can replace the product part of the URL with any other valid product link — the Deeplink will still function correctly as long as the structure is preserved.
{% endhint %}

#### How to Configure a Deeplink

1. **Generate a sample affiliate link** for any product page (not the homepage) using your affiliate account or tools provided by the network.
2. **Identify the product URL** inside the link.
3. **Replace** the product URL portion with the [placeholder](https://ce-docs.keywordrush.com/features/subid-tracking#url-dynamic-placeholders) `{{url_encoded}}`.
4. **Paste** the new Deeplink into the **Deeplink URL field** in Content Egg.

**Example Template:**

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

When generating links, Content Egg will automatically substitute `{{url_encoded}}` with the current product’s encoded URL.

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

### 2. Direct Affiliate Links with ID Parameters

Some affiliate programs (like Amazon) don't use Deeplink redirection. Instead, they simply append a unique affiliate ID to the product URL.

#### Example Amazon Affiliate Link:

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

* `yourtag-20` is your **affiliate tracking ID**
* `tag` is the **parameter name** used by Amazon (this may vary across networks)

![](/files/-MTUcO26GuqiyTqiof_y)

#### How to Set Up Affiliate ID-Based Links

1. **Generate a few affiliate links** using your advertiser’s website or affiliate dashboard.
2. **Identify the common tracking ID** — this will appear the same across all links.
3. **Locate the tracking parameter name** (e.g., `tag=yourtag-20`, `aff_id=abc123`).
4. **Enter the full parameter** (name + value) in the domain settings within Content Egg.

{% hint style="warning" %}
**Do not include** `?`, `&`, or any prefixes before the parameter. Content Egg will automatically format the final URL properly when generating links.
{% endhint %}

#### ✅ Correct:

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

#### ❌ Incorrect:

* `?tag=yourtag-20`
* `&tag=yourtag-20`
* `yourtag-20`
* Just `tag` without a value

### Optional Tracking Parameters

Some networks allow you to pass additional information (e.g., sub IDs) for better tracking. You can use the following dynamic templates within your Deeplink:

* `{{post_id}}` – WordPress Post ID
* `{{author_id}}` – Post Author's User ID
* `{{author_login}}` – Post Author’s Username
* `{{item_unique_id}}` – Unique ID of the product

Please check the full list of [supported placeholders](https://ce-docs.keywordrush.com/features/subid-tracking#url-dynamic-placeholders).

### Multiple Deeplinks

Content Egg Pro supports multiple Deeplinks for different domains or subdomains. This is useful if you work with networks that require different tracking templates for specific sites.

Syntax:

```
default_deeplink;subdomain1:deeplink1;subdomain2:deeplink2
```

Example:

```
https://alitems.com/g/1234567/?ulp={{url_encoded}};tmall.aliexpress.com:https://alitems.com/g/abcdef/?ulp={{url_encoded}}
```

In this example:

* The default Deeplink (`https://alitems.com/g/1234567/?ulp={{url_encoded}}`) will be used for all domains unless a match is found.
* A specific Deeplink (`https://alitems.com/g/abcdef/?ulp={{url_encoded}}`) will be used **only** for `tmall.aliexpress.com`.

### Advanced Regex Syntax

For more complex scenarios, you can apply **custom rewrite rules** using regular expressions in the following format:

```
[regex][pattern][replacement]
```

This allows you to **search and replace** parts of the product URL using regex.

Examples:

Flipkart:

```
[regex][/https://www.flipkart.com/(.+)/][http://dl.flipkart.com/dl/$1&affid=myaffid]
```

Shopee Malaysia:

```
[regex][/https://shopee.com.my/(.+)/][https://shopee.com.my/universal-link/$1?utm_source=an_12345670001&utm_medium=affiliates&utm_campaign=-&utm_content=kpgmk-aepro---&af_siteid=an_12358850002&pid=affiliates&af_click_lookback=7d&af_viewthrough_lookback=1d&is_retargeting=true&af_reengagement_window=7d&af_sub_siteid=kpgmk-aepro---&c=-]
```

### Final Tips

* After configuring your Deeplinks or affiliate IDs, **test a few product pages**.
* Ensure that redirection works as expected and **clicks are being tracked** properly in your affiliate dashboard.
* If tracking isn’t working, double-check the templates and encoding format.


# Add & manage products

Search for products across your modules and attach them to a post — the Content Egg product workflow in the block editor.

Content Egg follows one simple loop:

> **Modules** fetch product data → the **Product Manager** searches and attaches products to your post → **blocks** render them on the page.

This page covers the middle step: finding products and attaching them to a post in the **block editor**.

{% hint style="info" %}
Using the **classic editor** or a **custom post type** like WooCommerce products? The workflow is identical — only the location differs. See **Classic editor & custom post types** *(guide coming next)*.
{% endhint %}

{% hint style="warning" %}
Search only spans modules that are **active and configured**. If a network is missing from your results, activate its module first — see [Modules](/modules/general-information).
{% endhint %}

## Where products are managed

In the block editor, open the **Content Egg** panel from the egg icon in the top-right plugin area. By default it's a compact **Products** panel in the right sidebar, listing the products attached to this post. The panel has a tab for each family — **Products**, **Coupons**, **Images**, and **Videos**. This guide uses **Products**; the other families work exactly the same way.

<figure><img src="/files/k32ZhXynx6KEJ9blX1tN" alt="The Content Egg panel in the block editor, listing attached products"><figcaption><p>The Content Egg panel — your attached products for this post</p></figcaption></figure>

{% hint style="info" %}
**Choose your interface.** Change how the manager appears at **Content Egg → Settings → Egg Blocks → Product manager interface**:

* **In-editor sidebar** *(default)* — the compact Products panel beside the editor.
* **Full product manager** — the full search & manage screen shown inline, instead of opening as a modal.
* **Classic metabox** — the older interface. *Deprecated; it will be removed in a future version.*
  {% endhint %}

{% hint style="info" %}
**Same manager everywhere.** In the classic editor and on custom post types (including WooCommerce products), the same manager appears in the right sidebar — identical to the block-editor panel. Only the mount differs; everything on this page applies there too. See [Classic editor & custom post types](/set-up-products/classic-editor).
{% endhint %}

## The Products panel

The panel lists the products already attached to this post — thumbnail, title, price, and quick actions. From here you can:

* **Search & add products…** — opens the full-screen manager on the **Search** tab.
* **Manage products** (list icon) — opens the manager on the **Added** tab.

Each row also lets you **edit**, **remove**, **reorder** (drag), and **insert a block** at the cursor.

## Search & add products

Click **Search & add products…** to open the manager on the **Search** tab.

* Type a **keyword** and search. Content Egg queries all your active modules at once and lists the results.
* Choose which **modules** to search. By default, the highest-priority module is preselected (priority is set in each module's settings).
* Click **Add** on a result — or click anywhere on the product row — to attach it. Products already on the post are flagged.

<figure><img src="/files/b8pxjFjG0JHzEgRWH1Dx" alt="The Search tab of the product manager, showing results across modules"><figcaption><p>Search your active modules and add products to the post</p></figcaption></figure>

The search box adapts to the modules you're searching — its placeholder shows what you can enter, for example *"Keyword, product URL, or EAN."*

* **Product URL** — some modules let you paste a product page URL to add that exact product.
* **EAN / GTIN** — some modules let you search by EAN. To match the same product across stores, see [Price comparison](/set-up-products/price-comparison-websites).

### Multiple keyword search

Enter several keywords separated by commas and Content Egg runs a separate query for each, then merges the results into one list. This is useful for [EAN/GTIN searches](/set-up-products/price-comparison-websites), and it also powers [product-list auto-update](/updating-products/updating-the-product-list) and [autoblogging](/set-up-products/autoblogging).

You can also assign results to [groups](/frontend/groups) directly from the search, using this syntax:

```
keyword1,keyword2,keyword3 -> group1,group2,group3
```

## Manage attached products

Open the **Added** tab (or click **Manage products**) to work with everything attached to the post:

* **Edit** a product's fields and description.
* Assign products to **groups**.
* **Reorder** by dragging, or **bulk remove**.
* **Refresh prices** to re-pull current price and availability.
* Generate an **AI title** or **description**.

<figure><img src="/files/1AZO1kTeTF5vImtbF0u4" alt="The Added tab of the product manager"><figcaption><p>Manage, group, reorder, refresh, and enrich attached products</p></figcaption></figure>

{% hint style="info" %}
**Tip:** double-click any product on the Added tab to open its **edit drawer** — the fastest way to adjust fields, edit the rich-text description, or run the AI title/description.
{% endhint %}

### Editing a product

The edit drawer gives you the product's fields plus a rich-text **description** editor.

<figure><img src="/files/j3zJixd8fgwzAPrO0ZrM" alt="The product edit drawer with fields, description, and AI actions"><figcaption><p>The edit drawer — fields, rich-text description, and AI actions</p></figcaption></figure>

{% hint style="warning" %}
**AI title & description** need AI features enabled first. Go to **Content Egg → Settings → AI**, enter your API key, and configure the defaults. See [Activating AI features](/ai/activating-ai-features).
{% endhint %}

## Put the products on the page

Attached products are saved to the post automatically — a **block** renders them. You have two ways to place one:

1. **By filter** — insert the **CE Products** block from the block inserter (under the **Content Egg** category). By default it renders products by filter: all modules, or the modules/groups you choose.
2. **Bound to specific items** — from the panel or the Added tab, drag an item into the editor (or use **insert**) to drop a CE Products block bound to exactly those products. Select several with **Ctrl/Shift** and drag them together to build a product list.

<figure><img src="/files/e4jED8oQ0aZHCNiYAix0" alt="Dragging products from the Product Manager into the editor to create a bound CE Products block"><figcaption><p>Drag products from the panel into the editor — select several with Ctrl/Shift to drop them as one list</p></figcaption></figure>

You can also start from the block: add an empty **CE Products** block, then open the Product Manager right from the block's sidebar to search and bind products to it.

<figure><img src="/files/kCb0pp9ybOPkI7kHiFCu" alt="A CE Products block rendering attached products in the editor"><figcaption><p>The CE Products block renders your products — by filter or bound to specific items</p></figcaption></figure>

For all block settings — template, filter vs binding, columns, showing or hiding fields — see [Gutenberg product blocks](/frontend/gutenberg-blocks).

## Build a shortcode

The manager's **Shortcode** tab generates a `[content-egg-block]` shortcode you can paste anywhere. It's most useful in the **classic editor**, but not only — shortcodes expose more parameters than blocks and let you select **custom templates**.

Configure:

* **Product groups**
* **Modules**
* **Exclude modules**
* **Limit**
* **Template** (including custom templates)

Copy the generated shortcode and paste it into your content. See [Shortcode parameters](/frontend/shortcode-parameters) for the full parameter list.

<figure><img src="/files/1A6uPkwA7oYDavCLpAs4" alt="The Shortcode builder tab of the product manager"><figcaption><p>Build a [content-egg-block] shortcode with groups, modules, limit, and template</p></figcaption></figure>


# Classic editor

Add products in the classic editor and on custom post types like WooCommerce — the same Product Manager, as a metabox, with shortcodes for display.

The Content Egg Product Manager isn't only for the block editor. On the **classic editor** and on **custom post types** — including **WooCommerce products** — the same manager appears **automatically** in the right sidebar, identical to the block-editor panel. There's nothing to enable.

## The Product Manager metabox

The metabox is the same Product Manager you'd use in the block editor, just in a different place:

* The same family tabs — **Products**, **Coupons**, **Images**, **Videos**.
* The same **Search**, **Added**, and **Shortcode** tabs, edit drawer, groups, price refresh, and AI title/description.

<figure><img src="/files/fBF6sXtTSroCuSn19KNR" alt="The Content Egg Product Manager in the right sidebar of the classic editor"><figcaption><p>The same Product Manager, in the right sidebar</p></figcaption></figure>

{% hint style="info" %}
The whole search-and-attach workflow is identical to the block editor. For the full walkthrough — searching modules, adding, managing, groups, and AI — see [Add & manage products](/set-up-products/how-to-add-products).
{% endhint %}

## Displaying products without blocks

The classic editor has no blocks, so products are displayed with **shortcodes** or **automatic embedding**:

* **Shortcode** — on the manager's **Shortcode** tab, build a `[content-egg-block]` (choose groups, modules, limit, and template, including custom templates) and paste it wherever you want the products to appear. See [Shortcode parameters](/frontend/shortcode-parameters).
* **Automatic embedding** — enable it in a module's settings to place its products at the start or end of the post automatically, with no shortcode. See [How content is displayed](/frontend/how-content-is-displayed).

## WooCommerce products

On WooCommerce products (and other custom post types) the metabox appears automatically — attach products exactly as above. For WooCommerce-specific display and synchronization (price sync, attributes, offers badges), see the [WooCommerce](/woocommerce/general-information) section.


# Import tools

### Watch Import Tools in Action

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

Content Egg's Import Tools make it easy to automatically and efficiently create:

* WordPress posts
* WooCommerce products

using product data from connected modules—individually or in bulk.

**Access:**\
Go to **Content Egg > Import Tools** in your WordPress dashboard.

### Table of Contents

{% content-ref url="/pages/3wHeLCAPNMRWoiaqEVHt" %}
[Import Presets](/set-up-products/import-tools/import-presets)
{% endcontent-ref %}

{% content-ref url="/pages/Vct1t557dk2DhFCT4MmQ" %}
[Import Queue](/set-up-products/import-tools/import-queue)
{% endcontent-ref %}

{% content-ref url="/pages/BH038dYJx1iXBjYApxMj" %}
[Search and Import](/set-up-products/import-tools/search-and-import)
{% endcontent-ref %}

{% content-ref url="/pages/LWU1Bwhn0TcZJqvl5f7A" %}
[Bulk Import](/set-up-products/import-tools/bulk-import)
{% endcontent-ref %}

{% content-ref url="/pages/sDAijk4TAIJHDK7X7B8n" %}
[Feed Import](/set-up-products/import-tools/feed-import)
{% endcontent-ref %}

{% content-ref url="/pages/ZEhNI6HGvvkLXIpnaM4R" %}
[Auto Import](/set-up-products/import-tools/auto-import)
{% endcontent-ref %}


# Import Presets

**Import Presets**

Import Presets are reusable configurations that simplify and speed up your import workflow. They allow you to apply consistent settings across all import methods, including Search, Bulk Import, Feed Import, and Auto Import.

The plugin comes with several built-in presets that you can edit or duplicate as needed.

You can also enhance your imported content using AI:

* Select from built-in AI prompts
* Or write your own custom prompts to generate unique, helpful content tailored to your site visitors — for the post title and body, for extra content sections, or for SEO fields such as the meta description and focus keyword

**Access:**\
Content Egg > Import Tools > **Presets** tab

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

When you import via Search, Feed Import, Auto Import, or Bulk Import, simply choose the preset you want to apply.

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

### **Main Settings**

**1. Post Type**\
Choose the type of content to create:

* **Post** — Standard WordPress post
* **WooCommerce Product** — Requires WooCommerce to be installed

For WooCommerce products, you can choose between two product types:

* **External/Affiliate Product -** Customers are redirected to the merchant’s website via your affiliate link. Products cannot be added to the cart on your site.
* **Simple Product -** A standard WooCommerce product.

{% hint style="info" %}
To automatically synchronize product images and prices with WooCommerce, go to Content Egg → Settings → WooCommerce. Ensure that the required modules are enabled under the "Automatic Synchronization Modules" section.
{% endhint %}

**2. Post Title Template**\
Use placeholders to generate dynamic post titles:

* `%AI.title%` — AI-generated title (set under AI-Powered Post Title)
* `%AI.content%` — AI-generated content snippet (set under AI-Powered Post Content)
* `%AI.your_prompt_name%` — the result of one of your own prompts (see Custom Prompts below)
* `%PRODUCT%` — Entire product object as JSON, including title, description, price, specifications, etc.
* `%PRODUCT.title%` — Product title
* `%PRODUCT.price%` — Product price
* `%PRODUCT.domain%` — Merchant domain
* `%PRODUCT.url%` — Product URL
* `%PRODUCT.ATTRIBUTE.attribute-name%` — Specific product attribute value

For the full list of supported placeholders, see [this link](/faq/placeholders-reference).

*Example:*

```
Buy %PRODUCT.title% for %PRODUCT.price% – %AI.title%
```

{% hint style="info" %}
**Pro Tip:**

Use `%SOURCE%` and `%SOURCE.<field>%` placeholders instead of `%PRODUCT%`.

* `%SOURCE%` (and `%SOURCE.*%`) returns the original product data before AI-powered fields are applied.
* `%PRODUCT%` returns the data after AI-powered processing.
  {% endhint %}

**3. Post Body Template**

Craft your content with the same placeholders as above, plus any Content Egg shortcodes to display product blocks.

*Example:*

```markdown
[content-egg-block template=review_box groups=ProductImport]

%AI.content%
```

{% hint style="info" %}
**Pro Tip:** Imported products are automatically assigned to the `ProductImport` group. Use `groups="ProductImport"` in your shortcodes to display only those items.
{% endhint %}

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

**4. AI-Powered Product Fields**

Enhance raw product data by generating short titles, subtitles, badges, ratings, and more.

1. Go to **Content Egg > Settings > AI** and enter your OpenAI API Key.
2. Enable the fields you want AI to generate.

**5. AI-Powered Post Title**

Select a predefined AI prompt to generate an optimized and relevant post title based on product data.

Choose a prompt that best matches the content type you're creating.\
For example, if you're generating a product review, select a **review-style prompt** for both the **title** and **content** to ensure consistency.

You can also use a **custom prompt** tailored to your specific needs.

{% hint style="success" %}
The generated title will be inserted using the `%AI.title%` placeholder in your **Post Title Template**.
{% endhint %}

**6. AI-Powered Post Content**

Choose a predefined AI prompt to automatically generate engaging and informative post body content based on the product data.

You can use this feature to create content such as:

* Product reviews
* Buyer’s guides
* How-to instructions
* Unique WooCommerce product descriptions
* And much more...

{% hint style="success" %}
Use `%AI.content%` in your Body Template to insert the generated content.
{% endhint %}

**7. Custom Prompts**

Write your own prompt, give it a short name, and use its placeholder anywhere in the preset. Add as many prompts as you need.

Each prompt has three fields:

* **Name** — a short name such as `meta_description`. It creates the placeholder shown next to the field, for example `%AI.meta_description%`. Use the copy button to copy it.
* **Prompt** — the instruction sent to the AI. Use placeholders like `%SOURCE%`, `%PRODUCT%`, `%PRODUCT.title%`, `%PRODUCT.price%` and `%PRODUCT.domain%` to pass product data. See the [full list of placeholders](/faq/placeholders-reference).
* **Result** — **Plain text** for values like a meta description or a keyword, **HTML** for content sections with headings, lists and tables.

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

Once a prompt is named, you can use it in three ways:

* Insert `%AI.your_name%` into the **Post Title Template** or **Post Body Template**
* Insert it into a **Custom Meta Field** value (see below)
* Pick it in the **AI-Powered Post Title**, **Post Content** or **Short Description** menus, where it appears as *Custom prompt: your\_name*

*Example — a meta description (Result: Plain text):*

```
Write a 155-character meta description for %PRODUCT.title%. Lead with the single biggest real benefit from the data below. Plain text, no quotation marks.

%SOURCE%
```

*Example — a product overview (Result: HTML):*

```
Write an overview of %PRODUCT.title% (priced at %PRODUCT.price%), highlighting its three best features in bullet points. Use only the data below.

%SOURCE%
```

Add `%SOURCE%` on its own line at the end whenever the answer has to state facts about the product — it passes the title, description, price, rating and specifications to the AI, so it writes from real data instead of guessing. Leave it out for purely wording tasks:

*Example — a title prompt:*

```
Make the product title exactly five words. Source: '%PRODUCT.title%'
```

{% hint style="info" %}
Each prompt runs **once per imported product**, and only when it is actually used — a prompt you have defined but not referenced anywhere costs nothing.

The same value is reused everywhere you reference it, so one prompt can fill several fields with a single AI request.
{% endhint %}

{% hint style="warning" %}
When a prompt is selected in the **Post Title**, **Post Content** or **Short Description** menu, that field's own formatting is applied and the **Result** setting is ignored. Post Content always expects Markdown from the AI.
{% endhint %}

**8. Custom Meta Fields**

Save any generated value into a post meta field — most often the fields your SEO plugin reads.

Add a field, enter the meta key and a value, where the value can contain any placeholder:

| Field name              | Field value             |
| ----------------------- | ----------------------- |
| `_yoast_wpseo_metadesc` | `%AI.meta_description%` |
| `_yoast_wpseo_focuskw`  | `%AI.focus_keyword%`    |

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

If you don't know the exact meta key, use **Add a known field** and pick it from the list. Content Egg knows the fields for **Yoast SEO**, **Rank Math**, **SEOPress** and **The SEO Framework**, and shows the plugins installed on your site first.

{% hint style="info" %}
One prompt can feed several plugins at once — point both `_yoast_wpseo_metadesc` and `rank_math_description` at the same `%AI.meta_description%` and it is generated only once.
{% endhint %}

{% hint style="warning" %}
**All in One SEO** is not in the list. Since version 4 it stores titles and descriptions in its own database table rather than in post meta, so writing those meta keys would have no effect.
{% endhint %}

**9. Price comparison**\
Enable this option to automatically add the same product from multiple modules—allowing you to build a price comparison block within a single post or WooCommerce product.

This feature works only with modules that support EAN-based search (European Article Number), enabling the plugin to match identical products across different sources.

When price comparison is enabled, modules will be processed based on **priority**, which you can configure in the settings of each module. Higher-priority modules are searched first when matching products.

{% hint style="info" %}
Recommendation: Use Sovrn (VigLink) for price comparison. It offers a large product database and doesn’t require individual advertiser approvals, making it easy to get started.
{% endhint %}

**10. Avoid Duplicates**\
Enable this option to automatically skip any product that’s already in the Import Queue or has been previously imported as a post or WooCommerce product.

**11. Use as Default Preset**\
Select this to make the current preset the default choice across all Import Tools.

### Supported Modules for Price Comparison

* Amazon
* Amazon No API
* BestBuy
* Bol.com
* CJ Products
* eBay
* Kelkoo
* Kieskeurig.nl
* Sovrn (VigLink)
* Tradedoubler Products
* Tradetracker Products
* Walmart
* Webgains

### Add Extra AI-Generated Content Sections

Content Egg lets you generate **extra AI-powered sections** in addition to the main post title and body content during import. You can use this to automatically create additional sections such as:

* Product Benefits
* FAQ
* User Tips
* Pros & Cons
* …or anything you define with a custom prompt

**1. Create a Custom Prompt**

In your Import Preset, under **Custom Prompts**, add a prompt and give it a short name such as `faq` or `pros_cons`.\
Each prompt should output only the section text you want (e.g. just the benefits list or FAQ block).

Set **Result** to **HTML** so headings, lists and tables are kept.

**2. Insert the Placeholder in Your Template**

Add the placeholder shown next to the prompt name into your **Post Body Template**, where you want the generated content to appear:

```markdown
%AI.content%

<h3>FAQ</h3>
%AI.faq%

<h3>Pros and cons</h3>
%AI.pros_cons%
```

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

Add as many sections as you need — there is no limit.

**Result**

When importing products, Content Egg generates each section and inserts it into the post according to your template layout.

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


# Import Queue

When you import products or posts with any Import Tool, they aren’t created immediately. Each import request becomes a task that’s processed in the background—one task at a time.

**Location**\
Content Egg > Import Tools > Queue

**Task Statuses**

* **Pending**: Awaiting processing
* **Working**: Currently importing
* **Success**: Completed without errors
* **Failed**: Encountered an error

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

### How It Works

* The plugin uses the default WordPress Cron system—**no additional setup is required**.
* If you’ve replaced WP-Cron with a real cron job, schedule it to run every 1–5 minutes for timely imports.

### Managing the Queue

* **Stop All Tasks**\
  Click this button to remove any tasks that are still Pending.
* **Task Log & Links**\
  In the queue table, each row shows a brief import log. Once a task completes, click the link to view the newly created post or WooCommerce product.


# Search and Import

The Search tool lets you find products by keyword and quickly create posts or WooCommerce products from the results.

**Access:**\
Go to **Content Egg > Import Tools > Search** tab

{% hint style="success" %}
Before using this tool, make sure your [**Import Presets**](/set-up-products/import-tools/import-presets) are configured according to your needs.
{% endhint %}

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

### How It Works

1. **Enter a search keyword**\
   Type in the keyword related to the product you want to find.\
   Some modules also allow searching by product URLs.
2. **Select a Module**\
   Choose the product source (e.g., Amazon, Ebay) you want to search from.
3. **Apply filters (optional)**\
   If the selected module supports it, you can set locale, price range, and other filters.
4. **Click the Search button**\
   Product results will appear below the search form.
5. **Choose an Import Preset**\
   Select a preset to define how the post or product will be created.
6. **Choose a Category**\
   Select the post or WooCommerce product category for the imported items.\
   If no category is selected, the default category from the chosen preset will be used.
7. **Import Products**
   * Click individual products to import them one by one
   * Or click **Import All** to queue all search results

{% hint style="info" %}
All selected products will be added to the Import Queue and processed in the background.\
To track their status, go to the [**Queue tab**](/set-up-products/import-tools/import-queue).
{% endhint %}


# Bulk Import

The **Bulk Import** tool allows you to create multiple posts or WooCommerce products using a list of keywords.

**Access:**\
Go to **Content Egg > Import Tools > Bulk Import** tab

{% hint style="warning" %}
Each keyword in the list will generate a separate post or product.
{% endhint %}

{% hint style="success" %}
Before using this tool, make sure your [**Import Presets**](/set-up-products/import-tools/import-presets) are configured according to your needs.
{% endhint %}

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

### How It Works

1. **Select an Import Preset**\
   Choose how the post or product will be structured.
2. **Select a Category**\
   Choose the post or WooCommerce category for the imported items.\
   If left empty, the default category from the selected preset will be used.
3. **Select a Module**\
   Pick the product source you want to use (e.g., Amazon, Ebay, etc.).
4. **Set Publishing Options**\
   Choose when the posts should be published:
   * Immediately
   * Scheduled: Spread the publishing over 1 to 12 months
5. **Add Keywords or URLs**\
   Enter one keyword per line. Each line will create a new post.\
   Some modules also support direct product URLs—useful for partial feed imports.\
   Simply paste the product URLs, one per line.
6. **Start Import**\
   Click the **Start Import** button. Tasks will be added to the [**Import Queue**](/set-up-products/import-tools/import-queue) and processed in the background.

{% hint style="info" %}
You can monitor import progress and access completed posts/products via the [Queue tab](/set-up-products/import-tools/import-queue).
{% endhint %}


# Feed Import

The **Feed Import** tool allows you to import a complete product feed with a single click. Each product in the feed will be turned into a separate post or WooCommerce product.

### Watch Feed Import in Action

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

{% hint style="warning" %}
**Note:** This tool imports **all** products from the selected feed. If you want to import only selected products, use the [**Bulk Import**](/set-up-products/import-tools/bulk-import) tool instead.
{% endhint %}

**Access:**\
Go to **Content Egg > Import Tools > Feed Import** tab

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

### Important Considerations

This tool makes it easy to queue large product feeds—even 100,000+ items—with one click. There are no built-in hard limits on the number of products you can import.

However, performance depends heavily on your hosting environment. Here's what you should know:

**Can WordPress Handle a Million Products?**

* **Up to 3,000 products:** Easy to manage, even on shared hosting.
* **3,000–30,000 products:** Recommended to use VPS or cloud hosting. Basic performance tuning required.
* **30,000–100,000+ products:** Needs a powerful server, database optimizations, and expert setup.
* **1,000,000+ products:** Technically possible, but not practical—expect slow performance, high server costs, and SEO indexing limits.

{% hint style="warning" %}
Be realistic with your goals. Start small and scale carefully.
{% endhint %}

{% hint style="success" %}
Before using this tool, make sure your [**Import Presets**](/set-up-products/import-tools/import-presets) are configured according to your needs.
{% endhint %}

### How It Works

1. **Configure Feed Module**\
   Set up the Feed module for your CSV or XML file as described in the [Feed Module Guide](/modules/feed-modules).
2. **Check Feed Status**\
   Ensure that your feed is synced correctly and shows a **"Ready"** status. All feed products must be loaded into the local database.
3. **Select an Import Preset**\
   Choose how each product will be imported and displayed.
4. **Set Publishing Options**\
   Decide whether to publish immediately or schedule posts over time.
5. **Start Import**\
   Click **Import All** to queue all feed products for import.

{% hint style="success" %}
All tasks will be added to the Import Queue and processed automatically in the background.\
You can monitor progress under the [**Queue tab**](/set-up-products/import-tools/import-queue).
{% endhint %}


# Auto Import

The Auto Import tool allows you to automatically search for products by keyword at scheduled intervals and import any **newly found products** as WordPress posts or WooCommerce products.

**Access:**\
Go to **Content Egg > Import Tools > Auto Import** tab

{% hint style="success" %}
Before starting, ensure your [**Import Presets**](/set-up-products/import-tools/import-presets) are configured correctly and have the **"Avoid Duplicates"** option enabled to prevent re-importing the same products.
{% endhint %}

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

### How It Works

1. **Click "Add New Rule"**\
   Start by creating a new auto-import rule.
2. **Set Rule Details**
   * **Rule Name** – Name your rule for easy identification
   * **Import Preset** – Select how products will be imported
   * **Module** – Choose the product source (e.g., Amazon, Ebay)
3. **Set Run Frequency**\
   Choose how often the rule should run: daily, weekly, etc.
4. **Enable "Sort by Newest First" (optional)**\
   When enabled, the rule will prioritize newly released products.

   > **Note:**
   >
   > * Not all modules support sorting by newest. If unsupported, the default sort order will be applied.
   > * In some cases, enabling this option may lead to less relevant search results.
5. **Add Keywords**\
   Enter one keyword per line.
   * Each rule run will process one keyword at a time
   * Up to 10 products are processed per keyword per run
6. **Avoid Duplicates**\
   Ensure your selected import preset has "Avoid Duplicates" enabled to skip already-imported products.
7. **Start Rule**\
   Once saved, the rule will run based on your configured schedule.

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

### Cron and Scheduling

* The plugin uses WordPress's default **WP-Cron** system. **No additional setup is required**.
* If you use real cron, make sure it runs every 5–15 minutes for timely execution.

{% hint style="success" %}
All tasks will be added to the Import Queue first. You can monitor progress under the [**Queue tab**](/set-up-products/import-tools/import-queue).
{% endhint %}

### Smart Rule Controls

Each module has a **limited number of results per keyword**. To avoid running idle jobs or importing outdated results, configure rule limits:

* **Stop after X days** – Auto-pauses the rule after the selected number of days
* **Stop after importing X products** – Stops the rule once the total import count is reached
* **Stop if no new products for X runs** – Pauses the rule after consecutive empty runs
* **Disable keyword after no products for X runs** – Disables a keyword after X runs without results
  * Disabled keywords will be marked in square brackets `[like this]` and skipped in future runs

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

{% hint style="danger" %}
If a module returns an error 5 times in a row, the auto import rule will automatically **pause** to prevent further failures.
{% endhint %}

### Tip for Getting More Products

{% hint style="success" %}
When using "Sort by Newest First" with supported modules, you can automatically capture **newly released products** as they become available on the source site.

In some cases, enabling this option may lead to less relevant search results.
{% endhint %}

#### Modules Supporting "Sort by Newest First"

* Amazon API
* Amazon NoAPI
* Bol.com
* Ebay
* Envato
* Tradedoubler
* Walmart


# Bridge Pages

Bridge Pages let you send visitors to a clean product-focused page on your own site, instead of linking them straight to the merchant.

{% hint style="info" %}
**Recommended Reading.** For step-by-step instructions, best practices, and SEO tips, read the full guide: [How to Build Bridge Pages for Affiliate Marketing](https://www.keywordrush.com/blog/how-to-build-bridge-pages-for-affiliate-marketing/)
{% endhint %}

**Watch Bridge Pages in Action**

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

**Bridge funnel:**

Your Resource/landing page (main article) → Bridge Page (dedicated product details) → Merchant website (Amazon)

<figure><img src="/files/hy0oe7O7gD66rV1y83eQ" alt="" width="375"><figcaption></figcaption></figure>

### Why it’s useful

* **More pageviews & session depth**: clicks first land on your Bridge Page, increasing pageviews and session depth.
* **Reduced “thin affiliate” signals**: Pages overloaded with outbound affiliate links can sometimes be flagged by Google as low-value. Moving most links into Bridge Pages distributes them more naturally.
* **SEO opportunities**: each Bridge Page can rank for long-tail queries (e.g. specs, reviews, FAQs), not just the parent article.
* **Better monetization**: use Bridge Pages to display multiple merchants, show price history, coupons, or alternatives.

#### Examples of Bridge Pages

* A detailed product entry in your WooCommerce catalog
* A standalone product review
* A price comparison page

### What you can do with Bridge Pages

* Import Bridge Pages for many products in one click from the post editor.
* Choose where links go: merchant (affiliate) or your Bridge Page.
* Make a product canonical so the same item across your site points to one central Bridge Page.

### Creating Bridge Pages (from the Post Editor)

1. Open a post in wp-admin and scroll to the Content Egg metabox.
2. Search/add products as usual (select some, or leave unselected to import all).
3. Click the **Import as Bridge Page** dropdown and choose a preset.
4. You’ll see a small toast message confirming how many items were queued.

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

{% hint style="warning" %}
Bridge Pages aren’t created immediately—they’re added to the [import queue](/set-up-products/import-tools/import-queue). To monitor progress, go to Content Egg → Import Tools → Queue.

After importing, refresh the post edit page. You’ll see a small link icon next to products that now have a Bridge Page, along with a quick link to edit that page.
{% endhint %}

<figure><img src="/files/4MGNU86f2ZOm6deDmghT" alt=""><figcaption></figcaption></figure>

### Canonical Bridge Pages (Preset option)

In Content Egg → Import Tools → [Presets](/set-up-products/import-tools/import-presets), each preset can enable:

**Make imported Bridge Pages canonical**

* ON: every product you import with this preset becomes the *site-wide default* destination for that product. Wherever that product appears, links will prefer this Bridge Page (unless you intentionally override it per post).
* OFF: the mapping only applies in the post where you imported it.

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

### Where should product links send visitors?

{% hint style="info" %}
**Downside of Bridge Pages:** Some visitors just want to buy right away. Forcing them through a Bridge Page can sometimes lower conversions.

That’s why it’s often smart to keep your **top product blocks linked directly with affiliate URLs**, while using Bridge Pages for secondary products or deeper comparisons.
{% endhint %}

<figure><img src="/files/AuJWqrCsGdnPlp5vgaTz" alt="" width="375"><figcaption></figcaption></figure>

**You control this in three layers:**

1. Per-block override (Gutenberg)
2. Per-shortcode override (classic editor)
3. Global setting (default)

#### Global default

Settings → Frontend → Link destination preference

* Prefer Merchant (affiliate) — send users to the retailer by default.
* Prefer Bridge Page (on your site) — send users to your Bridge Page when one exists.

#### Block (Gutenberg) override

In the block sidebar (Display Options → Link Destination):

* Auto (follow global setting)
* Prefer Merchant (affiliate)
* Prefer Bridge Page (on your site)

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

#### Shortcode override

Add `link_target=` to your shortcode:

* `affiliate | bridge | auto`

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

### Button text (optional)

Content Egg → Settings → Frontend

* Product Button Text (affiliate): customize “Buy now”.
* Bridge Button Text: customize “See details”.

  Both support dynamic tags: %MERCHANT%, %DOMAIN%, %PRICE%, %STOCK\_STATUS%.

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

Suggestions

* Affiliate: *Buy now*, *Buy at %MERCHANT%*, *Check price*
* Bridge: *See details*, *View product page*, *Read review*

### Best practices

* Use canonical for evergreen products you’ll reference in many posts (one trusted Bridge Page).
* Use per-post mapping if a product needs a unique context in a specific article.
* Pick one link strategy (merchant vs. bridge) for your site, then override per block only when needed.
* Save the post before importing to ensure it records where the mapping was created.

### FAQ

**Do Bridge Pages work with WooCommerce?**

Yes. You can import as Posts or Woo products; your preset controls the type.

**Can I change where a product points later?**

Yes. Importing a new Bridge Page for the same product will replace the previous mapping.

**What happens if I delete a Bridge Page?**

The plugin automatically cleans up its references, so other posts won’t link to a deleted page.


# Prefill tool

The Prefill Tool allows you to automatically add Content Egg products to existing posts.

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

{% hint style="warning" %}
Prefill will modify your posts, and changes **cannot be undone**. Be sure to **back up your database** before proceeding.
{% endhint %}

### AI Integration

To enable AI-powered features in Prefill, enter your [OpenAI API key](https://ce-docs.keywordrush.com/ai/openai-api) under:\
**Content Egg > Settings > AI > OpenAI API Key**\
Make sure your OpenAI account has sufficient balance.

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

### How It Works

1. **Navigate to:** Content Egg > Prefill
2. **Select Posts to Prefill:**\
   Use filters such as **post type**, **status**, **category**, etc., to narrow down your selection.

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

3. **Alternatively**, you can run Prefill on a single post directly from the post edit screen. Just click the “**Prefill**” button in the editor.

   <figure><img src="/files/G3554xGHabJw3O0viexn" alt=""><figcaption></figcaption></figure>
4. **Choose Modules:**\
   Select one or more Content Egg modules to use for product insertion.

* Modules are processed based on priority (set in each module’s settings).
* If the first module fails to find relevant products, the next module in the priority list will be used.

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

5. **Set Prefill Mode & Options:**\
   Choose your desired **Prefill Mode** and adjust any additional settings.
6. **Start the Process:**\
   Click **Start Prefill** to begin. The process runs in the background using **WP-Cron**, so you can safely leave the page and return later to monitor progress.

### Fully Automatic AI Mode

This mode works with both Gutenberg and Classic Editor posts. It does everything for you:

* Splits the article into clear sections
* Finds keywords based on each section’s content
* Filters out products that don’t match
* Writes unique content for each product
* Adds product blocks directly to your post


# Price comparison websites

{% hint style="info" %}
For an in-depth understanding of how price comparison platforms work and some useful tips on creating your own price comparison website using WordPress, take a look at this article: [Can I Create a Price Comparison Website for $50 on WordPress?](https://www.keywordrush.com/blog/create-price-comparison-website-on-wordpress/)
{% endhint %}

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

To create a price comparison list, you need to find and add the same product to the different modules.

<figure><img src="/files/gtTVxiGQycCZpQOj6A5A" alt="Adding the same product from different modules"><figcaption><p>Add the same product from several modules to compare their prices</p></figcaption></figure>

Then display them with a price-comparison template. Insert the **CE Products** block and choose a price-comparison template, or use a `[content-egg-block]` shortcode — for example:

```
[content-egg-block template=price_comparison]
[content-egg-block template=price_comparison_card]
[content-egg-block template=buttons_row]
[content-egg-block template=offers_logo]
[content-egg-block template=offers_list]
```

You can use the `title` parameter for shortcodes to set a custom title. For example:

```
[content-egg-block template=price_comparison_card title="Best prices for Xiaomi Mi Electric Shaver S500"]
```

![](/files/-MTUgYQ-5oFCcwm9xq_6)

### Merging products

Content Egg usually searches for products by keyword, and the search results depend on the API. When entering a product name, such as a smartphone model, you can find both smartphones and accessories or other semantically relevant products in the search results.

There's no great way to automatically combine products from different sources in one price comparison list. You usually need to search and select products manually. Depending on the module, you can use filters by price, category, or other parameters to increase products' relevance.

### Search by EAN

The only reliable way to combine items into one price comparison list is to search by a product's EAN.

{% hint style="success" %}
**One-click EAN search.** When a product in your search results shows an EAN, click it — Content Egg instantly re-runs the search by that EAN across every module that supports EAN search, gathering the same product from all your stores into one list. It's the fastest way to build a price-comparison list.
{% endhint %}

<figure><img src="/files/nssclf7JbJwHLucjCEtR" alt="Clicking an EAN in search results to search all EAN-capable modules"><figcaption><p>Click an EAN in the results to search all EAN-capable modules at once</p></figcaption></figure>

Currently, only the following modules support the ability to search by EAN:

* Amazon
* Amazon No API
* Awin
* Bestbuy
* Bolcom
* Daisycon
* CJ Products
* Ebay
* Impact Radius
* Kelkoo
* Kieskeurignl
* Sovrn (Viglink)
* Tradedoubler
* Tradetracker
* Walmart
* Webgains
* Feed modules

In addition, not all advertisers can fill out the EAN field for their products. If that's the case, EAN search is not available.

### Price comparison and autoblogging

Automatically combining products into one price comparison list can yield distorted results since autoblogging also works with keywords.

That's why we recommend that you start your website with any single module and then add products for price comparison manually. The second option is to use pending posts for autoblogging and moderate the content before posting it.

Manually creating big price comparison websites may take a long time. Usually, about 10% of pages generate up to 90% of your website's traffic. So you can automatically fill your website with products and add price comparison boxes only to the most visited pages for better conversion.

### WooCommerce or Posts

We recommend using WooCommerce for price comparison websites. Please refer to [this guide](/faq/how-to-add-price-comparison-blocks-to-woocommerce) on how to add price comparison blocks to WooCommerce single and archive page templates.

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


# All Products page

Go to `Content Egg > All Products` to view all products added to your website via the Content Egg plugin. This is a convenient place to track products' availability or the date of the last price update.

![](/files/-MTVcWKknpFwMOINmHGk)

{% hint style="info" %}
Please note that this page only displays products that have already been added to your website. It has nothing to do with advertiser databases.
{% endhint %}


# How to add badge icons

To add one of the standard icons before a badge, use the following format by adding an **icon name** followed by a colon (`:`):

**Available Icons:**

* award
* bag-check
* balloon-heart-fill
* bell
* bookmark-heart
* bookmark-star
* box2-heart
* boxes
* chat-heart-fill
* check-all
* check-circle
* check-lg
* check-square-fill
* circle-fill
* coin
* controller
* earbuds
* emoji-frown
* emoji-sunglasses
* fire
* gem
* hand-thumbs-down
* hand-thumbs-up
* headphones
* heart
* house-check
* lightning-charge-fill
* music-note-beamed
* patch-check
* patch-exclamation
* rocket-takeoff
* star-fill
* stars
* trophy

#### **Example:**

To add the "award" icon with a badge "Editor's choice", use:

```
award:Editor's choice
```

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

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

### Custom SVG Icons

To add custom SVG icons for badges, use the `cegg_svg_icon_list` filter. This filter allows you to easily extend the list of available icons by adding new ones. Below is an example of how to add custom icons:

```php
function add_custom_icons($icons) {
    // Check-square icon
    $icons['check-square'] = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check-square" viewBox="0 0 16 16"><path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/><path d="M10.97 4.97a.75.75 0 0 1 1.071 1.05l-3.992 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425z"/></svg>';
    
    // Star-fill icon
    $icons['star-fill'] = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-star-fill" viewBox="0 0 16 16"><path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/></svg>';

    return $icons;
}
add_filter('cegg_svg_icon_list', 'add_custom_icons');

```

{% hint style="info" %}
For more SVG icons, you can explore a large collection from the [Bootstrap Icons Library](https://icons.getbootstrap.com/).
{% endhint %}


# Autoblogging

{% hint style="warning" %}
While the Autoblogging feature is now deprecated, it will remain available in the plugin for as long as needed. We recommend using the new [Auto Import tools](/set-up-products/import-tools/auto-import).
{% endhint %}

The autoblogging feature allows you to automatically create posts or WooCommerce products. Go to `Content Egg > Add autoblogging` to create an autoblogging task. You can set a keyword list, post title, and body template, as well as select modules and other settings.

{% hint style="info" %}
Autoblogging's primary principle is **1 keyword = 1 post**.
{% endhint %}

For example, if you set 10 keywords, up to 10 posts will be created.

![](/files/-MTUjCjOa8MYlaZ6iLR6)

You can also set the frequency of the autoblogging task launch and the number of keywords to be processed in one run.

![](/files/-MTUjnMYP10i3TIrqyE3)

All processed keywords are marked with `[`square brackets`]`.

![](/files/-MTUkFCIrgpSIqLz2dGQ)

When all the keywords are processed, the task switches to inactive status. You'll need to add new keywords to resume autoblogging.

![](/files/-MTUkUXJKV5MhRY1XgSD)

### How to import products in bulk

The Content Egg plugin isn't designed to bulk import all products to your website when a separate page is created for each product. We recommend using our [External Importer plugin](https://www.keywordrush.com/externalimporter) for this task. It imports entire website sections to your WooCommerce directory in just a few clicks.

You can set a list of product names as keywords for autoblogging and enable the `Results for updates and autoblogging = 1` option in module settings if you want to import only one product to each separate page.

![](/files/-MTUl7s62KsbOIJm9ktR)

This will allow you to create a regular catalog with products in automatic mode.

### Working with keywords

When we were developing the autoblogging feature, we had a few unique ideas in mind that make the Content Egg plugin different from other product import plugins.

One of these ideas is that you can **work with keywords** instead of products. In other words, instead of mindlessly importing all products from affiliate websites, you can focus exclusively on selecting keywords.

Your primary job will be to find low-competition keywords that can generate search traffic. These can be trending keywords, long-tail keywords, answers to questions, and so on. We think you get the idea. You can do a simple Google search to find some great guides on the following topics:

* How to find the right niche
* Finding keyword ideas
* How to analyze keywords
* Keyword research tools

Try to choose commercial keywords for which the product modules can make relevant product selections. Please note that it will be difficult for the modules to select products based on informational keywords. In this case, you can set a separate keyword for product modules using a special syntax:

```
Main Keyword;Amazon:Keyword 1;ModuleId2:Keyword 2;…
```

For example:

```
How to Use a French Press for Loose Tea;Amazon:French press;CjProducts:Loose tea
```

In this example:

* `How to Use a French Press for Loose Tea` is the main keyword. You can use it for media modules like YouTube or Google Images.
* `French press` is a special keyword for the Amazon module.
* `Loose tea` is a special keyword for the CJ Products module.

### Content mashup

The second important idea behind Content Egg autoblogging is the ability to use a [content mashup](https://en.wikipedia.org/wiki/Mashup_\(web_application_hybrid\)), where different types of content from many sources are combined to be presented on one page. As a result, we turn non-unique content into a **unique page** and a useful service for website visitors.

As such, for automatically generated websites, we recommend using a mix of modules, such as products, images, videos, news, and coupons.

Coupons may provide good conversions, but coupon modules don't have a large content base for long keyword searches. Typically, you will need to use single words to find relevant coupons.

### Tags and formulas

Tags are special placeholders that will be replaced with the current keyword or product data. You can use tags in your post title or body template.

For SEO, 'additional' keywords in titles usually work well. These can be, for example, the current year; words like "sale", "cheap", and "discount"; answers to questions like "where to buy", "what is the best", "how to use", etc. For example:

`What is the best %KEYWORD% in 2021?`

To generate more unique content, you can use 'formulas' in which one random phrase or word is selected from a list. For example:

`{Where to buy|What is the best} %KEYWORD%?`

`{Discount for|Sale|Cheap|Hot deals:} %PRODUCT.title%`

### Why autoblogging doesn't create posts

General recommendation: Before you start setting up autoblogging, make sure that all modules on the manual post edit page are working well and returning data for your keywords.

The most common reasons why autoblogging doesn't create new posts are:

1. There are no active keywords, and the task has become inactive. Add more keywords.

![](/files/-MTUozt-O-cJw880LjHp)

2\. Data is missing for a required module. Go to the post edit page and test the module with your keywords.

![](/files/-MTUp5806R26UShcUK_s)

### Affiliate Egg and autoblogging

If you're using [Content Egg + Affiliate Egg integration](/modules/affiliate-egg-integration), the most convenient way to bulk import products for Affiliate Egg modules is to use a **list of product URLs instead of keywords**. Doing this creates a separate post/product for each URL on your website.

![](/files/-MTUpZKcnAZUegQvZvju)

You can collect the list of URLs from the sitemap or using another convenient way.

### Searching by URL and autoblogging

Some Content Egg modules also search for products by URL:

* Aliexpress
* Amazon
* Awin
* Daisycon
* Flipkart
* Viglink
* Walmart
* Webgains

You can use a list of direct URLs instead of bulk import keywords for these modules, too. For example, you can copy a list of product URLs directly from the AWIN data feed.

### WooCommerce and autoblogging

{% content-ref url="/pages/-MTVSGB-pZXH7jj0EwdT" %}
[WooCommerce and autoblogging](/woocommerce/woocommerce-and-autoblogging)
{% endcontent-ref %}

### Price comparison and autoblogging

{% content-ref url="/pages/-MTUfLmEwJqH6Y9kk7\_c" %}
[Price comparison websites](/set-up-products/price-comparison-websites)
{% endcontent-ref %}

### How to create a top products affiliate website

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


# How content is displayed

The ways to show your Content Egg products on the page — blocks, shortcodes, and automatic embedding.

Once you've [added products](/set-up-products/how-to-add-products) to a post, there are three ways to show them on the page. In the block editor, use **blocks**; in the classic editor or when you need extra options, use **shortcodes**; or let a module **embed automatically**.

## Blocks (recommended)

In the block editor, Content Egg adds its own **Content Egg** section to the block inserter, with four blocks:

* **CE Products** — product cards, lists, grids, comparison tables, and more. See [Gutenberg product blocks](/frontend/gutenberg-blocks).
* **CE Coupons** — coupon output.
* **CE Images** — image output.
* **CE Videos** — video output.

<figure><img src="/files/32hbMApq83EP7WHbjaVG" alt="The Content Egg section in the block inserter with four blocks"><figcaption><p>The Content Egg section in the block inserter</p></figcaption></figure>

These blocks are the recommended way to display products, coupons, images, and videos.

Separately, **Egg Blocks** are a collection of editorial blocks (intros, pros & cons, verdicts, FAQs) that can also display product data. See [Egg Blocks](/egg-blocks/introduction).

## Shortcodes

Shortcodes give you the same output outside the block editor — and a few options blocks don't expose.

* **`[content-egg-block]`** — the product display shortcode. Same output as the CE Products block, but with **more parameters** and support for **custom templates**. Build one on the **Shortcode** tab of the product manager (or write it by hand), then paste it wherever you want the products. Best for the **classic editor**, page builders, or advanced options. See [Shortcode parameters](/frontend/shortcode-parameters).

<figure><img src="/files/1A6uPkwA7oYDavCLpAs4" alt="Building a content-egg-block shortcode"><figcaption><p>Build a [content-egg-block] shortcode on the Shortcode tab</p></figcaption></figure>

* **`[content-egg]`** — the older module shortcode. **Deprecated** and superseded by the blocks and `[content-egg-block]`. It still works on existing sites, but isn't recommended for new content.

{% hint style="info" %}
In a visual editor, insert shortcodes with a **Shortcode block** — not as plain text — so they render correctly once saved.
{% endhint %}

## Automatic embedding (deprecated)

A module can also embed its products automatically at the beginning or end of every post, set per module in its settings. This older method is **deprecated** — prefer blocks or the `[content-egg-block]` shortcode for new content — but it still works on existing sites.

## Page builders

Content Egg works with most WordPress page builders, including Gutenberg and Elementor. In any builder, add shortcodes with a dedicated **shortcode block/widget** rather than as plain text.


# Gutenberg product blocks

Display your Content Egg products anywhere in a post with the CE Products block — templates, product binding, and display options, edited live in Gutenberg.

The **CE Products** block displays your Content Egg products anywhere in a post — product cards, lists, grids, comparison tables, bestseller sections, and more. It produces the same output as the `[content-egg-block]` shortcode, but you edit it visually with a live preview.

{% hint style="info" %}
**Do not confuse it with Egg Blocks.**\
**Egg Blocks** are a separate collection focused on **structured editorial content** — intros, FAQs, key takeaways, pros and cons, verdicts, and similar article sections. Some Egg Blocks can also show product data, but they are a separate concept, documented separately.

[Egg Blocks — Introduction](/egg-blocks/introduction)
{% endhint %}

## Add the block

1. Add your products first — see [Add & manage products](/set-up-products/how-to-add-products).
2. Insert the **CE Products** block from the block inserter (under the **Content Egg** category).
3. Pick a **template** from the gallery that appears (sorted by most recently used).

<figure><img src="/files/ydey9Mg4xcA4JZqkugtg" alt="The CE Products block template gallery"><figcaption><p>Choose a template when you insert the block</p></figcaption></figure>

From the block **toolbar** you can switch the template (**Select Template**), toggle **Dark mode**, or refresh the preview.

## Choose which products show — Product Binding

In the sidebar's **Data Filtering** panel, the **Product Binding** control decides which products the block renders:

* **Filter** *(default)* — show products by module, group, or all:
  * **Include modules** / **Exclude modules**
  * **Product Groups**
  * **Products** — specific product IDs, comma-separated
  * **Limit** and **Offset**
* **Choose products** — search and pick **specific products**, shown in exactly the order you set.

<figure><img src="/files/qNFvEnDLTwDlVofzEp16" alt="The Data Filtering panel with the Filter / Choose products toggle"><figcaption><p>Filter by module/group/all, or choose specific products</p></figcaption></figure>

There's also a **Source Post ID** field — leave it empty to use the current post, or enter another post's ID to display products attached there.

## Display options

The **Display Options** panel controls presentation, independent of the data:

* **Visible / Hidden Elements** — show or hide individual fields (price, image, rating, button, badge, shipping, stock status, subtitle, and more).
* **Link Destination** — **Auto** (follow the global setting), **Prefer Merchant** (affiliate), **Prefer Bridge Page** (on your site), or **Both**.
* **Render via AJAX (async)** and **Lazy load** — load the block asynchronously, or only when it scrolls into view (lazy load requires async).

<figure><img src="/files/Wm4KoHjM4Te6P0qTjp6B" alt="The Display Options panel"><figcaption><p>Show/hide fields, choose the link destination, and control loading</p></figcaption></figure>

## Output customization

The **Output Customization** panel adjusts styling. Which controls appear depends on the template:

* **Columns** / **Columns (Small)** — for grid templates
* **Tabs Type** — tabs, pills, or underline, for grouped templates
* **Button Variant** and **Button Text**
* **Border** and **Border Color**
* **Title Tag** — `div` or `h1`–`h5`
* **Image Ratio** — 1x1, 4x3, 16x9, or 21x9
* **Columns Order** and **Start Number**

<figure><img src="/files/OUiQPswHv9NMEnuHtEat" alt="The Output Customization panel"><figcaption><p>Columns, buttons, borders, title tag, and image ratio</p></figcaption></figure>

## Data changing

The **Data Changing** panel adjusts the data itself:

* **Currency** — convert displayed prices to another currency.
* **Add Query Argument** — append a parameter to affiliate links (for example `tag=CUSTOM_TAG`) for your own tracking.

## Custom templates

Custom (theme) templates aren't available in the block's template gallery — apply them with a **shortcode** instead. Custom templates don't implement the block's sidebar controls, so they're used via `[content-egg-block]`: build one on the **Shortcode** tab of the product manager (or write it by hand) and set its `template` to your custom template.

See [How to create a custom template](/custom-templates/how-to-create-a-custom-template) and [Shortcode parameters](/frontend/shortcode-parameters).

## Full parameter reference

Every block setting maps to a `[content-egg-block]` shortcode parameter. For the complete list — including a few parameters not exposed in the block UI, such as `next` — see the [**Shortcode Parameters Guide**](/frontend/shortcode-parameters).

{% hint style="info" %}
**Not using Gutenberg?** [Content Egg shortcodes](/frontend/how-content-is-displayed) give the same product output on any post type, and work with most page builders including Elementor.
{% endhint %}


# Shortcode parameters

Shortcode parameters allow you to control both the product data output and the layout design in Content Egg. These parameters can be applied similarly for both module-specific and global shortcodes.

### 1. Data Filtering and Selection

#### <mark style="background-color:green;">limit</mark>

The `limit` parameter controls how many items are displayed in the output. It restricts the product count to a specified number.

**Display the first 5 products only:**

```
[content-egg-block template=offers_logo limit=5]
```

#### <mark style="background-color:green;">offset</mark>

The `offset` parameter skips a specified number of items before starting the output, allowing you to control where the product listing begins.

**Combining limit with offset**: If you want to show a specific subset of products (e.g., products 6 to 10), you can combine `limit` with `offset`:

```
[content-egg-block template=offers_logo limit=5 offset=5]
```

#### <mark style="background-color:green;">next</mark>

The `next` parameter is used to divide a product list into separate blocks, allowing you to display items in sequential batches. Each time you use the shortcode with the next parameter, it shows the next set of products.

**Display the first two products:**

```
[content-egg-block next=2]
```

**Display the next four products after the first two:**

```
[content-egg-block next=4]
```

Each time you increase the `next` value or repeat the shortcode, the next set of items will be shown.

#### <mark style="background-color:green;">post\_id</mark>

The `post_id` parameter lets you display Content Egg data from one post in any other post, page, or widget. This is useful for reusing product data across your site without duplication.

```
[content-egg-block template=offers_logo post_id=123]
```

#### <mark style="background-color:green;">sources</mark>

The `sources` parameter aggregates curated picks from **multiple posts** into one block — e.g. a comparison page pulling a "best budget" pick and a "best premium" pick from other posts. Works only with block shortcodes.

**Format:** a `;`-separated list of source definitions. Each definition starts with a `post_id`, followed by optional `|key:value` options:

* `group` — only include products from this group
* `limit` (default `1`) — max number of products to take from this source
* `badge` — forces this badge onto the cheapest surviving product from this source

Only in-stock products are considered, sorted by price ascending before `limit` is applied.

**Example:** Pull the cheapest "budget" and "premium" picks from post 28649, plus one pick from post 1305748:

```
[content-egg-block template=top_listing sources="28649|group:budget|limit:2|badge:Best Budget; 28649|group:premium|badge:Best Premium; 1305748|badge:Best 230V"]
```

By default, results display in the order the sources are listed. Add an explicit `sort` parameter (e.g. `sort=price`) to override this with normal price-based sorting instead.

#### <mark style="background-color:green;">modules</mark>

The `modules` parameter allows you to specify which modules to pull data from by using **module IDs**, not the module names. You can find the correct module IDs in the Content Egg settings pages under the specific module configurations.

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

You can add as many module IDs as needed, separated by commas.

```
[content-egg-block template=offers_logo modules="Amazon,Ebay2"]
```

#### <mark style="background-color:green;">exclude\_modules</mark>

Excludes certain modules from the output.

**Example:** To exclude Amazon from a price history graph, you can use the following shortcode:

```
[content-egg-block template=price_history exclude_modules=Amazon]
```

#### <mark style="background-color:green;">**sort**</mark>

The `sort` parameter sets the sorting criteria for products, with options: `price`, `discount`, `reverse`, and `total_price`.

**Example:**

```
[content-egg-block template=list sort=discount]
```

This sorts products by the highest discount first.

For more detailed information on product sorting options, [click here](/frontend/product-sorting).

#### <mark style="background-color:green;">**order**</mark>

The `order` parameter controls the sorting direction in sortable shortcodes, such as product lists. You can set it to either `asc` (ascending) or `desc` (descending).

**Example:**

```
[content-egg-block template=list sort=price order=desc]
```

By default, the sorting order is `asc` (ascending).

#### <mark style="background-color:green;">products</mark>

Filter products output by product ID. Click on the "`id`" button to add the product ID filter to the output shortcode. You can also set multiple IDs separated by commas.

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

#### <mark style="background-color:green;">groups</mark>

The `groups` parameter filters data based on predefined product groups. This allows you to display only products that belong to specific groups, providing a way to categorize and organize product outputs.

**Example:** To display products from a specific group, use:

```
[content-egg-block template=offers_logo groups="group_name"]
```

You can also display products from multiple groups by separating group names with commas.

For more details on how to set up and use groups, check the instructions [here](/frontend/groups).

#### <mark style="background-color:green;">group\_pick</mark>

The `group_pick` parameter selects one product per group.\
Allowed values:

* `cheapest` – selects the lowest-priced product
* `priciest` – selects the highest-priced product
* `random` – selects a random product

Note: This parameter works only with block shortcodes, not with module shortcodes.

**Example:**

To display only the cheapest product for each group:

```
[content-egg-block template=offers_logo_groups group_pick="cheapest"]
```

#### <mark style="background-color:green;">locale</mark>

The `locale` parameter can be used only with the **Amazon**, **eBay**, and **Shopee** modules to filter products based on the selected country.

**Example:** To display US-based products from Amazon, use:

```
[content-egg-block modules=Amazon locale=US]
```

For details on integrating this with visitor geolocation plugins, please refer to the [relevant documentation](https://ce-docs.keywordrush.com/modules/affiliate/amazon#id-2.-geolocation-ip-detection).

#### <mark style="background-color:green;">ean</mark>

The `ean` parameter filters products by one or more EAN codes. It allows you to narrow down the output based on specific product EANs.

**Example:** To display products with specific EAN codes, use:

```
[content-egg-block template=list ean=0711719765790,5016488137300]
```

Please note, this parameter does not add new products; it only filters the existing products in the output.

#### <mark style="background-color:green;">remove\_duplicates\_by</mark>

The `remove_duplicates_by` parameter removes duplicate products from the output by checking one of the specified product fields: `orig_url`, `url`, `title`, `ean`, or `domain`. The module priority will determine which duplicate product to keep. This parameter can only be used with block shortcodes.

**Example:**

```
[content-egg-block template=offers_list remove_duplicates_by=orig_url]
```

### **2. Data Changing:**

#### <mark style="background-color:green;">currency</mark>

The `currency` parameter allows you to convert all offers in your product list to a single currency, ensuring consistency when products come from different regions with varying currencies.

**Example:** To convert all offers to EUR:

```
[content-egg-block template=offers_grid currency=EUR]
```

If the desired currency is [not listed](http://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html#dev), you can manually add an exchange rate by modifying the `functions.php` file of your theme (or child theme) using a custom function like this:

**Example (Adding a Custom Exchange Rate):**

```php
function my_content_egg_currency_rate ($rate, $from, $to)
{
    if ($from == 'USD' && $to == 'KES')
        return 100.15; // <--- exchange rate from USD to KES
    if ($from == 'KES' && $to == 'USD')
        return 0.01; // <--- exchange rate from KES to USD
}
add_filter( 'content_egg_currency_rate', 'my_content_egg_currency_rate', 0, 3 );
```

This allows you to manually set the conversion rate for any currency not natively supported by the plugin.

#### <mark style="background-color:green;">add\_query\_arg</mark>

The `add_query_arg` parameter allows you to modify affiliate URLs by appending custom query variables to the URL. This can be useful for adding tracking parameters or custom tags to the affiliate links.

**Example:** To add a custom tag to Amazon affiliate URLs, use:

```
[content-egg-block modules=Amazon add_query_arg="tag=CUSTOM_TAG"]
```

This appends the `tag=CUSTOM_TAG` query variable to all Amazon product URLs, making it easy to customize the URL for tracking or other purposes.

#### <mark style="background-color:green;">keyword</mark>

The `keyword` parameter allows you to create an auto-updated list of products by specifying a keyword. It works only with [module shortcodes](/frontend/how-content-is-displayed#shortcodes) and automatically filters products based on the provided keyword.

**Example:** To display a list of Amazon products related to "Echo Dot":

```
[content-egg module=Amazon template=list keyword="echo dot"]
```

You can also assign a custom group name by encoding the group separator `->`:

```
[content-egg module=Amazon template=list keyword="echo dot-&gt;Smart speakers"]
```

Additionally, you can control the maximum number of results using the `limit` parameter:

```
[content-egg module=Amazon keyword="echo dot" limit=3]
```

The auto-update schedule and the maximum number of search results can be configured in each module's settings.

### 3. Template Output Customization

#### <mark style="background-color:green;">template</mark>

Defines the layout template used for displaying product data. Typically, you will set this parameter through the [shortcode builder](/frontend/how-content-is-displayed).

#### <mark style="background-color:green;">hide/visible</mark>

The `hide` and `visible` parameters allow you to control the display of specific elements in your product templates. Each template has default settings for what data is shown or hidden, but these parameters give you the flexibility to hide or force display certain fields.

`hide`: Hides specified fields that would otherwise be shown.

`visible`: Forces the display of fields that might be hidden by default.

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

**Available Fields to Hide or Display:**

`badge`, `button`, `code`, `coupons`,`coupon_revival`, `delivery_at_checkout`, `description`, `disclaimer`, `domain`, `endDate`, `img`, `logo`, `merchant`, `new_used_price`, `number`, `percentageSaved`, `price`, `priceOld`, `price_update`, `prime`, `promo`, `rating`, `shipping_cost`, `shop_info`, `startDate`, `stock_status`, `subtitle`, `title`

**Example to Hide Multiple Fields:**

```
[content-egg-block template=offers_list hide=price,shop_info]
```

**Example to Display Hidden Fields:**

```
[content-egg-block template=offers_list visible=description,badge]
```

These parameters give you control over which product data elements are shown or hidden, allowing you to customize the look and feel of your product display.

#### <mark style="background-color:green;">**async**</mark>

Enables asynchronous (AJAX) rendering on the frontend.

* `async=1` — enable async rendering
* `async=0` (default) — normal server-side rendering

Example:

```
[content-egg-block template=item_simple async=1]
```

#### <mark style="background-color:green;">**lazy**</mark>

Delays async rendering until the block is close to (or inside) the user’s viewport. Works only with `async=1`.

* `lazy=1` — load when visible (lazy load)
* `lazy=0` (default) — load immediately (still async)

Examples:

```
[content-egg-block template=item_simple async=1 lazy=1]

[content-egg-block template=list async=1 lazy=1]
```

#### <mark style="background-color:green;">**link\_target**</mark>

The `link_target` parameter controls whether product links in your block point directly to the merchant (affiliate link) or to a [Bridge Page](/set-up-products/import-tools/bridge-pages) (if one exists).

Usage example:

```
[content-egg-block template="item_simple" link_target="bridge"]
```

Available options:

* `affiliate` – Always prefer the merchant’s affiliate link, even if a Bridge Page exists.
* `bridge` – Always prefer a Bridge Page (on your site) when available. If no Bridge Page exists, the link falls back to the affiliate link.
* `both` – Enables dual destinations (typically two action buttons: one for Bridge Page + one for affiliate). Not all templates support this. Supported templates: *Product card*, *Grid*, *List*.
* `auto` *(default)* – Follow the global setting you chose in *Content Egg → Settings → Frontend → Link Destination Preference*.

#### <mark style="background-color:green;">**btn\_variant**</mark>

Changes the button style, allowing you to choose from a variety of predefined styles such as solid or outlined versions of different color schemes. The available options are:

`primary`, `secondary`, `success`, `danger`, `warning`, `info`, `light`, `dark`, `link`, `outline-primary`, `outline-secondary`, `outline-success`, `outline-danger`, `outline-warning`, `outline-info`, `outline-light`, `outline-dark`.

**Note:** `btn_color` is an alias for `btn_variant`.

You can also customize all the color themes for these styles (`primary`, `secondary`, etc.) in the `Frontend settings` of Content Egg.

**Example:** To set a button with the `outline-primary` style, use:

```
[content-egg-block template=offers_list btn_variant=outline-primary]
```

#### <mark style="background-color:green;">**btn\_text**</mark>

Customizes the text displayed on buttons.

**Example:** To change the button text to "Check Price", use:

```
[content-egg-block template=offers_list btn_text="Check Price"]
```

This will override the default button text and display "Check Price" on all buttons.

#### <mark style="background-color:green;">color\_mode</mark>

Changes the color theme for the current block. The only available option is `color_mode=dark`, which applies a dark theme to the block.

You can also set the Dark theme globally by going to **Content Egg settings > Frontend > Color Mode**.

**Example:**

```
[content-egg-block template=offers_list color_mode=dark]
```

#### <mark style="background-color:green;">cols</mark>

Controls the number of columns in `grid` templates. You can also adjust the number of columns across different screen sizes using the parameters `cols_xs`, `cols_sm`, `cols_md`, `cols_lg`, `cols_xl`, and `cols_xxl`.

`cols` is equivalent to `cols_md` (medium screens).

**Example:**

To set a grid with 4 columns for medium screens and 2 columns for small screens:

```
[content-egg-block template=offers_grid cols_md=4 cols_sm=2]
```

This will display 4 columns on medium screens and 2 columns on smaller screens, allowing for a responsive layout.

#### <mark style="background-color:green;">img\_ratio</mark>

Specifies the aspect ratio of the product images in the display. Allowed values are `1x1`, `4x3`, `16x9`, and `21x9`.

**Example:** To set the image aspect ratio to `16x9`, use:

```
[content-egg-block template=offers_grid img_ratio=16x9]
```

#### <mark style="background-color:green;">**title\_tag**</mark>

Sets the HTML tag for the product title. Allowed values are `div`, `h1`, `h2`, `h3`, `h4`, `h5`, and `h6`.

**Example:** To set the product title as an `h3` tag, use:

```
[content-egg-block template=offers_list title_tag=h3]
```

#### <mark style="background-color:green;">**border**</mark>

Adds a border to the product display. You can set the border width from 0 (no border) to 5 (thickest border) using this parameter.

**Example:** To add a border with a width of 3, use:

```
[content-egg-block template=offers_list border=3]
```

#### <mark style="background-color:green;">**border\_color**</mark>

Specifies the color of the border. The allowed values are `primary`, `secondary`, `success`, `danger`, `warning`, `info`, `light`, and `dark`.

**Example:** To add a border with the `danger` color, use:

```
[content-egg-block template=offers_list border=2 border_color=danger]
```

#### <mark style="background-color:green;">**tabs\_type**</mark>

Customizes the style of tabs for displaying products in templates that support tabs. The available options are:

* `tabs`: Standard tab style.
* `pills`: Rounded "pill" style tabs.
* `underline`: Tabs with an underline for the active tab.

**Example:** To display tabs in "pills" style, use:

```
[content-egg-block template=offers_list_groups tabs_type=pills]
```

#### <mark style="background-color:green;">**cols\_order**</mark>

Changes the display order of columns in templates with multiple columns. You can specify the order of columns by listing their numbers in the desired sequence.

**Example:** To rearrange the columns in the order `3, 2, 1, 5, 4`, use:

```
[content-egg-block template=offers_logo cols_order=3,2,1,5,4]
```

This will display the third column first, followed by the second, and so on.

#### <mark style="background-color:green;">**start\_number**</mark>

Specifies the starting number for product number badges. This is useful for listings where you want to start numbering from a specific value rather than 1.

**Example:** To start numbering products from 3, use:

```
[content-egg-block template=top_listing visible=number start_number=3]
```

This will make the list begin with number 3 for the first product.

#### <mark style="background-color:green;">**title**</mark>

Customizes or overrides the main title used in some templates.

**Example:**

```
[content-egg-block template=price_comparison_card title="Sony Playstation 5 Slim"]
```

#### <mark style="background-color:green;">**show**</mark>

The `show` parameter is used only with "`customizable`" block templates. It allows you to display specific information about a product, such as the price, title, button, etc. It's recommended to use this parameter in combination with the [`products`](#products) parameter to target specific product information.

**Available Fields for `show`:**

`button`, `currencyCode`, `img`, `img+url`, `last_update`, `price`, `priceOld`, `stock_status`, `title`, `url`

**Example:**

To display only the price of a specific product (ID: 808726894), use:

```
[content-egg-block template=customizable product="808726894" show=price]
```

**Low Price**: Display the lowest price product:

```
[content-egg-block template=customizable show=price limit=1 sort=price order=asc]
```

**High Price**: Display the highest price product:

```
[content-egg-block template=customizable show=price limit=1 sort=price order=desc]
```

### Customizing Templates with CSS:

{% content-ref url="/pages/t2QCqrN8xmH5EwZHvxzl" %}
[Customizing templates with CSS](/custom-templates/customizing-templates-with-css)
{% endcontent-ref %}


# Product groups/variations

Split product output into separate blocks with product groups — assign, display, and show them as tabs.

Groups are the simplest way to split product output into separate blocks — for example, a phone in one group and its accessories in another, or different colors and variations of the same product. (The other way to control exactly what a block shows is to bind specific products to it — see [Choose products](/frontend/gutenberg-blocks).)

{% hint style="info" %}
Check the [Smart Groups](/ai/smart-groups) feature to create and assign product groups using AI.
{% endhint %}

## Assign products to a group

On the **Added** tab of the product manager:

* **In bulk** — select products, then pick a group from the dropdown, or choose **+ New group…** to create one.
* **Per product** — assign a group (or a new group) on a product's row, or in its **edit drawer**.

<figure><img src="/files/K7fMq7HXN7XXEe69sfFm" alt="Assigning products to a group on the Added tab"><figcaption><p>Assign a group in bulk or per product on the Added tab</p></figcaption></figure>

You can also assign a group **while searching**, using the syntax `keyword -> group name`. After the product is added, it's placed in that group automatically. This syntax also works for [auto-update keywords](/updating-products/updating-the-product-list).

## Display one or more groups

To show only certain groups:

* In the **CE Products** block, set the **Product Groups** filter in the block's Data Filtering panel — pick one or more groups. See [The Products block](/frontend/gutenberg-blocks).
* Or use the `groups` shortcode parameter, with several groups separated by commas:

```
[content-egg-block template=offers_logo groups="PlayStation 5 Digital,PlayStation 5 Disc Edition"]
```

See [Shortcode parameters](/frontend/shortcode-parameters#groups).

## Show groups as tabs

Special group templates render each group as its own tab automatically. Set the tab order with the `groups` parameter, and the tab style with `tabs_type` (`tabs`, `pills`, or `underline`).

```
[content-egg-block template=offers_logo_groups]
[content-egg-block template=offers_list_groups groups="PlayStation 5 Digital,PlayStation 5 Disc Edition"]
```

<figure><img src="/files/YTZWfVPGOf5xvwqr4em3" alt="Products displayed as group tabs"><figcaption><p>Group templates turn each group into a tab</p></figcaption></figure>

## Removing a group

To remove a group, simply unassign it from all products — once no product uses it, the group is deleted automatically.

## Static groups

If you want certain groups to be available for **all posts by default**, use the `cegg_static_product_groups` filter.

Add the following to your theme's `functions.php` (preferably in a **child theme**):

```php
add_filter('cegg_static_product_groups', function ($groups, $post_id) {
    $groups[] = 'Top Picks';
    $groups[] = 'Editor\'s Choice';
    $groups[] = 'Limited-Time Deals';
    return $groups;
}, 10, 2);
```


# Product sorting

How the display order of products is decided in Content Egg blocks and shortcodes — drag-and-drop, chosen order, price templates, and sort options.

The order products appear in is set mainly by **drag-and-drop**, with a few rules that can take over (a price-sorting template, or an explicit sort).

## Arrange products by hand

In the product manager, **drag** attached products into the order you want. This sets a position that's saved with the post and used across all your product blocks.

<figure><img src="/files/4Mb7Ac52bO6t2gar3P9D" alt="Dragging attached products to reorder them"><figcaption><p>Drag attached products to set their order</p></figcaption></figure>

You can also set an exact position with the numeric **Order** field in a product's edit drawer, under **More fields** — handy for precise tweaks. Drag-and-drop is the usual way.

## What decides the final order

For the **CE Products** block and `[content-egg-block]` shortcodes, the display order is decided in this priority:

1. **A `sort` parameter**, if set — sorts by `price`, `discount`, `reverse`, or `total_price` (with `order` set to `asc` or `desc`). This overrides everything else. See [Shortcode parameters](/frontend/shortcode-parameters#sort).
2. **Price-focused templates** — some templates always sort by price (ascending), even with no sort set: **Price Comparison**, **Price Comparison Card**, **Offers Logo**/**Offers List** variants, **Price Alert**, **Price Statistics**, **Review Box**, and similar. Other templates (Grid, List, Top Listing, Buttons Row, and custom templates) keep your chosen order.
3. **A specific list of products** — when you use **Choose products** binding, or a manual `products="…"` filter, the block renders the products in the exact order you picked or listed them.
4. **Your manual order** — otherwise (Filter mode by module, group, or all), products follow your drag-and-drop order. Products you haven't arranged yet fall back to badge-first, then each module's priority.

{% hint style="info" %}
To force a strict price sort, either choose one of the price-focused templates above, or add `sort` / `order` to a `[content-egg-block]` shortcode.
{% endhint %}

## Egg Blocks

Egg Blocks that show products — **Product Card**, **Quick Picks**, **Comparison Table** — render products in the **exact order you add them** in the block. There's no drag-to-reorder and no automatic price sorting inside these blocks. To change the order, remove and re-add the products in the order you want.


# Featured images

Each Content Egg module includes an option to automatically set featured images for posts.

![](/files/-MTVw_XC2hN1n9zbrlGj)

You can activate external featured images in Content Egg by going to `General settings > External featured images`. This works for both WordPress posts and WooCommerce products.

![](/files/-MTVwgKnFEBpUEreUDB8)

### Additional Gallery Images

Additional gallery images are available for **WooCommerce products only**.

To activate this feature, go to\
**Content Egg > Settings > WooCommerce** and enable **"Gallery Images"**.

You can choose between two options:

* **Use external URLs** — images will be loaded directly from the source.
* **Download images into media library** — images will be saved locally.

**Note:**\
If you choose to save images locally, the download does not happen immediately.\
Images are processed in the background, and you'll see a notice about the scheduled gallery image download (as shown in the screenshot).

<figure><img src="/files/VA3R8ERqxCh6kAtpS264" alt="" width="375"><figcaption></figcaption></figure>

#### Gallery Image Support

Most product APIs provide only the main product image.\
Gallery images are supported **only** by the following modules:

* Aliexpress
* Amazon API
* Amazon NoAPI
* Bol.com *(must be enabled in the module settings – disabled by default)*
* eBay
* Tradedoubler
* Walmart


# Frontend Search

With Content Egg, you can add each deal as a separate post. WordPress searches by post titles, but if you want a search form that shows results from affiliate networks directly (without creating posts for each deal), you can use Content Egg's Frontend Search function.

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

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

You need to create two things: a page with the search form (or widget) and a page for displaying the results.

### Creating a Search Form

There are several ways to show the affiliate search form with Content Egg:

1. **Using a Widget**:
   * Find the widget **CE: Product Search** in **Appearance – Widgets**.
   * Place the widget in a sidebar. It will have the same styling as a standard WordPress widget.
2. **Using a Shortcode**:
   * Use the shortcode `[content-egg-search-form]`.
   * This shortcode will generate a standard WordPress search form and direct users to a special page with results from affiliate modules instead of the default WordPress search page.
   * The shortcode design matches the standard WordPress search form.

Please note, some themes can extend the Content Egg search form. For example, Rehub offers additional shortcodes.

#### Search Settings

The next step is to set up the page for output results. To do this:

1. Go to **Content Egg – Settings – General**.
2. Add the output shortcode to the text area labeled **Search page template**.

We recommend using common Content Egg shortcodes. For example:

```
[content-egg-block template=offers_list]
```

![](/files/-M529PZwlI3QJk8ae50S)

### Customization

To configure the search form, create a `ce-product-searchform.php` file in the root directory of your theme (or child theme). Add and customize the form code:

```php
<form role="search" method="get" class="search-form" action="<?php echo esc_attr(\ContentEgg\application\ProductSearchWidget::getSearchFormUri()); ?>">
      <input type="text" name="s" placeholder="Product search...">
      <button type="submit">Search</button>
</form>
```

To configure the global page template with a search result, create a `ce-product-search.php` file in the root directory of your theme (or child theme). Use code similar to the code in your `page.php` template.

To configure `product-search` in the URL search form, use a filter that returns a new slug:

```php
add_filter('cegg_product_search_slug', 'example_callback');
```


# Translation

Translation Guide

The frontend language of Content Egg can be different from your main WordPress language and admin dashboard language. Content Egg has its own setting for this:

* Go to **Content Egg > Settings > Frontend**.
* Set the **"Website Language"** option to choose the language used for the frontend display.

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

{% hint style="info" %}
If you only want to change a button label, go to **Content Egg → Settings → Frontend**, and update the **"Product Button Text"** or **"Coupon button text"** fields.
{% endhint %}

### **1. Quick Translation via Plugin Settings**

For most use cases, you can translate frontend strings directly in the WordPress dashboard:

* Go to **Content Egg > Frontend > Frontend Texts**.
* Modify the available strings to your desired language.

![](/files/-MTVwuZRSXWBXOkPmAz7)

{% hint style="warning" %}
**Note:**\
If a string includes placeholders such as `%s` or `%d`, make sure your translated version includes **the exact same placeholders** in the correct position. These are dynamically replaced with actual values and are essential for proper functionality.
{% endhint %}

### **2. Advanced Translation with POT Files**

For more comprehensive setups, you can use a traditional translation method with `.POT` files.

* This allows you to translate all plugin strings using tools like **Poedit** or **Loco Translate**.
* Detailed steps are provided in this guide: [Localization with POT files](/customization/localization).


# Greenshift templates

Greenshift is a Gutenberg block builder plugin available for installation from the [WordPress repository](https://wordpress.org/plugins/greenshift-animation-and-page-builder-blocks/). With this plugin, you can create your own templates for displaying Content Egg products, as well as use prebuilt patterns and customize them.

{% hint style="warning" %}
**Note**: Greenshift is a free plugin, but to integrate with dynamic data from Content Egg, you will need a paid [Query Addon](https://www.keywordrush.com/go/greenshift-query-addon).
{% endhint %}

Before you start, make sure that Greenshift and the Query Addon are installed on your site.

### Using Prebuilt Patterns

1. Add Content Egg products [as usual](/set-up-products/how-to-add-products) and save the post.
2. Toggle the block inserter:

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

3. Go to the `Patterns > Content Egg` tab and select one of the prebuilt templates:

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

4. In the `Repeater Builder` settings, you can apply various filters, similar to how you do with the [shortcode parameters](/frontend/shortcode-parameters), to filter out the products to output in that block:

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

5. You can also customize and adjust any block parameters (e.g., button color, font size, number of columns, padding, and much more):

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

### Reusable Templates

Once the template's appearance is customized according to your requirements, you can save it as a custom pattern.

1. From the `Repeater Builder` menu, select "`Create pattern`":

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

2. Add a name for the template and select the "`Synced`" checkbox.

<figure><img src="/files/zJ1YUK0HWDpS5xUdqwyg" alt="" width="375"><figcaption></figcaption></figure>

3. Your pattern is now available in the `My Patterns` section. Use it in any posts you want.

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

4. Go to `Appearance > Patterns` if you want to edit the pattern. Select "`Select Post type for preview`" to get Content Egg data for preview from the last created post.

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

5. Because you selected the synchronization option in step 2, any changes made to this pattern will be applied to all pages where you use this pattern to display products.


# Egg Blocks — Introduction

Review, roundup, and buying-guide articles assembled from 25 semantic blocks — designed around Google's E-E-A-T framework and optimized for the signals AI search engines actually cite.

Egg Blocks are a set of 25 purpose-built Gutenberg blocks included with Content Egg. They let you assemble a full product review, roundup, or buying guide from semantic, styled, structured blocks instead of raw paragraphs, headings, and tables.

Each block is server-side rendered: what you see in the Gutenberg editor is the structure your visitors see on the frontend. Blocks come with multiple visual variants, a shared design system, and direct integration with Content Egg products.

### Contents

1. [Why Egg Blocks](#why-egg-blocks)
2. [Getting started](#getting-started)
3. [Core concepts](#core-concepts)
4. [Recipes](#recipes)

***

### Why Egg Blocks

Writing product content in a generic editor usually means stitching together paragraphs, bullet lists, and shortcodes. Egg Blocks replace that ad-hoc approach with a library of editorial primitives organized into five groups:

* **Article structure** — `intro`, `conclusion`, `section-header`, `toc`, `faq`, `callout`, `step-list`
* **Editorial insights** — `key-takeaways`, `criteria`, `methodology`, `definitions`, `myth-fact`, `pros-cons`
* **Product commerce** — `product-card`, `quick-picks`, `where-to-buy`, `comparison-table`, `verdict`, `rating-breakdown`, `specifications`
* **Conversion & social proof** — `contextual-cta`, `pricing`, `testimonial`, `trust-signals`
* **Navigation** — `related-posts`

All blocks share consistent typography, spacing, and color tokens. You pick the block that matches the content you're writing and the theme handles the styling.

{% hint style="info" %}
Prefer to let an AI assistant assemble these for you? With [**Agent Access**](/ai-agents/ai-agents), you can connect ChatGPT or Claude and ask it to build a full review or roundup from Egg Blocks — you just describe what you want.
{% endhint %}

#### Benefits over core Gutenberg blocks

* **Semantic structure** — a `pros-cons` block carries more meaning than a two-column list; a `faq` block emits FAQPage JSON-LD automatically
* **Product-aware** — product-bound blocks pull live price, availability, and CTA URL from Content Egg offers at render time — no stale prices in your content
* **Consistent styling** — all blocks respect a single theme and color scheme setting
* **Multiple variants** — most blocks offer 2–6 visual styles (default, compact, cards, inline, etc.) so the same data can match different article layouts
* **AI-friendly** — the schema is stable and documented, so tools like the EggBlocks Writer skill can generate complete articles you copy-paste

***

### Getting started

#### Inserting a block

1. Open a post or page in the WordPress block editor.
2. Click the **+** (Add block) button.
3. Type the block name (e.g. `pros cons`, `quick picks`, `faq`) into the block search, or open the **Egg Blocks** category.
4. Click the block to insert it.

<div><figure><img src="/files/1GKUh04Z2AOO3PHOjiQO" alt=""><figcaption></figcaption></figure> <figure><img src="/files/eLtzoU1ZnnQScMFPM6I0" alt=""><figcaption></figcaption></figure></div>

**Configuring a block**

Each block has a sidebar panel on the right containing its fields.

Change the variant from the block toolbar or the sidebar — the block's fields stay the same, only the visual treatment changes.

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

#### Previewing

Egg Blocks are server-side rendered, so the editor shows an accurate preview of the final layout. For product-bound blocks, you'll see live Content Egg data (prices, stock, logos) after you bind a product.

***

### Core concepts

#### Variants

Most blocks support 2–6 **variants** — alternative visual layouts for the same underlying data. Switching a variant never loses data.

Examples:

* `eggb/pros-cons` — `default`, `compact`, `highlight`, `inline`
* `eggb/quick-picks` — `default`, `compact`, `alternatives`, `shelves`, `grid`, `highlight`
* `eggb/faq` — `default` (accordion), `flat` (always-open list)

Change the variant from the block toolbar or the sidebar. See each block's entry in the Block Reference for per-variant recommendations.

#### Theme and color scheme

Egg Blocks inherit two global settings:

* **Theme** — controls typography, spacing, and border treatments across all blocks
* **Color scheme** — `light`, `dark`, or `auto` (default: `auto`, which follows the site or reader preference)

These are set once in **Content Egg → Settings → Egg Blocks settings** and apply to every block on the site. Individual blocks don't need per-block theme overrides.

#### Changing block colors

Egg Blocks pick up your site's color palette automatically — you don't set colors per block.

To change the colors, update your theme's palette:

* **Block themes** — go to **Appearance → Editor → Styles → Colors**. Changes apply site-wide, including all Egg Blocks.
* **Classic themes** — most expose color controls under **Appearance → Customize → Colors**. The exact options depend on the theme.
* **If neither is available** — your theme doesn't expose color controls in the dashboard. You can define or override palette colors in `theme.json`, or target the block's CSS classes with custom CSS.

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

#### Table of contents integration

The `eggb/toc` block can run in two modes:

* **Manual** — you fill in the TOC items directly.
* **Auto** — the TOC collects items from other Egg Blocks on the same page.

For a block to appear in an auto TOC it must have:

* **Anchor** — becomes the wrapper HTML `id` and TOC link target.
* **TOC label** — the text shown in the TOC.
* **Include in TOC** — toggled on.

Blocks that support TOC metadata include `intro`, `conclusion`, `faq`, `criteria`, `quick-picks`, `comparison-table`, `key-takeaways`, `methodology`, `section-header`, `step-list`, and `where-to-buy`.

#### Product binding

Product-bound blocks (`product-card`, `quick-picks`, `where-to-buy`, `comparison-table`, optionally `verdict`) connect to a Content Egg offer through a product reference.

Bind products in two steps:

* [Search for and add products](/set-up-products/how-to-add-products) to the post using the Content Egg meta box.
* Click **Select Product** in the block panel and choose the product to bind to the block.

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

When the block renders, Content Egg resolves the reference and fills in:

* Live price and currency
* Stock status
* Merchant logo and domain
* Affiliate URL with click tracking
* Product image

You don't write these fields into the block yourself — they're owned by Content Egg and refreshed on a schedule. Editorial fields (your custom title, description, badge, chips, score) are yours to override.

#### Rich text

Some fields accept a small subset of inline HTML: `<strong>`, `<em>`, `<a>`, `<code>`, and basic lists where the block permits. The renderer strips anything outside the allowed subset — don't paste arbitrary HTML, media, or scripts into rich-text fields.

***

### Recipes

Common article types and the block sequences that work best for each. Use these as a starting point — swap variants and adjust the flow to fit your content.

#### Single-product review

```
intro → key-takeaways (cards) → product-card (featured) → specifications → pros-cons (default) → rating-breakdown (default) → verdict (summary) → faq → conclusion
```

Use when you're reviewing one product in depth.

#### Product roundup ("Best X")

```
intro → toc → key-takeaways → quick-picks (default) → repeated [section-header (editorial) + product-card + pros-cons (compact)] per product → comparison-table (default) → criteria (default, "how we picked") → faq → conclusion
```

Use for "best N of" listicles with 5+ products.

#### Buying guide

```
intro → toc → criteria (default) → methodology → definitions → quick-picks (highlight) → faq → conclusion
```

Use when educational framing matters more than a specific product ranking.

#### How-to / tutorial

```
intro (compact) → key-takeaways (inline) → step-list (default or cards) → callout (tip or warning) → faq → conclusion (compact)
```

Use for instructional or step-by-step content.

#### Head-to-head comparison

```
intro → comparison-table (versus) → pros-cons (highlight) per contender → verdict (default) → faq
```

Use when comparing exactly two products.

#### Explainer / informational

```
intro → toc (compact) → definitions → myth-fact (inline) → key-takeaways → conclusion
```

Use for category or concept explainers that don't recommend specific products.


# AI Generation & FAQ

Egg Blocks are designed to be easy to generate with AI. Instead of writing each block by hand, you can ask ChatGPT, Claude, or any AI chat to draft a complete article — intro, key takeaways, comparison table, pros/cons, FAQ, conclusion, and the rest — and paste the result straight into WordPress.

This page walks through the workflow, points out the gotchas, and answers common questions.

{% hint style="info" %}
**There's a faster way now.** This copy-paste workflow still works and needs no setup — but Content Egg now has a built-in **AI Agents** integration. Connect ChatGPT, Claude, or another assistant over OpenAPI/MCP and it searches your **real** products, builds the Egg Blocks, and saves them straight into a post — no copying markup by hand. For most people that's the better route now. See [**AI Agents**](/ai-agents/ai-agents).
{% endhint %}

### Contents

1. [What you get](#what-you-get)
2. [Quickstart](#quickstart)
3. [Which AI chat to use](#which-ai-chat-to-use)
4. [How to prompt](#how-to-prompt)
5. [Working with product blocks](#working-with-product-blocks)
6. [Tips for better output](#tips-for-better-output)
7. [FAQ / troubleshooting](#faq-troubleshooting)

***

### What you get

The **EggBlocks Writer** is a small instruction file (a "skill") that teaches any modern AI chat how to write Egg Blocks articles correctly. Once the AI has read it, you can ask for:

* **A complete article** — e.g. "a buying guide for standing desks under $500"
* **A single section** — e.g. "just the pros-cons and FAQ for this product"
* **A single block** — e.g. "one callout warning about counterfeit chargers"

The AI outputs ready-to-paste **Gutenberg markup**. You copy it, paste it into the Code Editor view in WordPress, switch back to the Visual Editor, and your article is there — fully structured with intros, takeaways, tables, FAQs, and everything else.

What the AI handles:

* Picking appropriate blocks for the article type
* Filling in titles, body text, variants, and TOC metadata
* Following the composition patterns from the Introduction recipes
* Generating coherent, consistent voice across the whole article

What you still handle:

* Assigning real Content Egg products to product blocks
* Fact-checking claims (AIs can invent specs or prices)
* Editorial polish and final voice

***

### Quickstart

#### 1. Load the skill

Paste this URL into ChatGPT, Claude, or any AI chat with web-fetch capability:

```
https://www.keywordrush.com/skills/eggblocks-writer/SKILL.md
```

Ask the AI to read it. You should see a short greeting confirming the skill loaded.

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

If you don't see a confirmation, the AI likely didn't fetch the URL. Try a different chat that has web access, or paste the SKILL.md contents directly into the conversation.

#### 2. Ask for what you need

```
/blocks single-product review of Sony WH-1000XM5
```

Or, without the slash command:

```
write a roundup of 5 ergonomic chairs as blocks
```

Or just name a block type:

```
faq block for best mechanical keyboards
```

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

#### 3. Paste into WordPress

1. Copy the fenced code block from the AI's response.
2. Open your post in the WordPress block editor.
3. Paste the markup.

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

#### 4. Assign products

If you already have Content Egg products on the page, use the **Copy all product references** button in the metabox toolbar before prompting the AI. It copies a JSON array of every product — title, URL, module ID, and unique ID — to your clipboard. Paste that data into the chat together with your article request and the AI will fill in `product_ref` automatically for every block it can match.

Without pasted product data, product-bound blocks (product-card, quick-picks, comparison-table, where-to-buy) are left with empty product slots. Click each one in the block editor, open the right sidebar, and use **Select product** to bind the matching Content Egg product. The AI output will list which blocks still need manual assignment at the end.

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

***

### Which AI chat to use

The skill works with any AI chat that can:

* Read a URL when asked
* Follow structured instructions
* Produce enough output to cover a full article

Confirmed-working chats (as of writing):

* **Claude** (claude.ai) — reads the URL reliably, strong adherence to the schema, best for long articles.
* **ChatGPT** (chat.openai.com) — works with web browsing enabled. Use GPT-4-class models; older/smaller models tend to invent block types.
* **Google Gemini** — works when web access is enabled.
* **Any Claude/GPT-powered assistant** (Perplexity, Poe, Copilot Chat, custom agents) — works if the underlying model is capable enough.

Smaller or older models often struggle. If the output looks wrong (wrong block names, invented fields, missing markup), try a stronger model before blaming the skill.

***

### How to prompt

The skill operates in two modes:

#### Conversation mode (default)

Just chat. Plan the article, discuss products, refine the outline, pick a tone. No block markup is produced. Use this to agree on scope before generating content.

Example:

> *"I want to write about portable monitors under $300. Can you help me plan the article?"*

The AI will respond in plain prose — asking questions, suggesting an outline, recommending blocks.

#### Block mode (triggered)

Block mode produces the pasteable markup. Trigger it with any of:

* **Slash command** — start with `/blocks`
* **Phrase** — include *"as blocks"* anywhere in the message
* **Naming a block type** — e.g. *"pros-cons for X"*, *"faq for Y"*

Example:

> *"/blocks single-product review of the Logitech MX Master 3S"*

Follow-ups stay in block mode automatically. So after the AI generates an article, you can say:

> *"make the intro shorter"*
>
> *"replace pick 3 with the Razer Pro Click"*
>
> *"add a callout warning about wrist strain"*

…and the AI will regenerate the affected blocks.

#### Good prompt examples

| Prompt                                                    | What you'll get                                  |
| --------------------------------------------------------- | ------------------------------------------------ |
| `Plan a buying guide for mechanical keyboards under $150` | Conversation: outline and suggestions, no markup |
| `/blocks single-product review of Sony WH-1000XM5`        | Full review article, Gutenberg markup            |
| `pros-cons block for BEAVERLAB Finder 4.0`                | A single pros-cons block                         |
| `as blocks: roundup of 5 ergonomic chairs`                | Full roundup article                             |
| `no product blocks — explainer on USB-C standards`        | Full article, no commerce blocks                 |

#### Scope keywords

* **Full article** is the default when you ask for a "review", "guide", "roundup", etc.
* **Section only** — say *"just the conclusion section"* or *"only the comparison-table and verdict"*.
* **Block only** — name a single block type, e.g. *"one callout about humidity"*.
* **No commerce** — include *"no product blocks"*, *"text only"*, or *"prose only"* to skip all product-bound blocks.

***

### Working with product blocks

When you mention specific products by name (e.g. "Sony WH-1000XM5", "Herman Miller Aeron"), the AI includes product-bound blocks automatically: product-card, quick-picks, comparison-table, where-to-buy, and so on.

#### Shortcut: copy products from the metabox

If the products are already saved on the page in Content Egg, click the **Copy all product references** button in the metabox toolbar. It copies a JSON array to your clipboard in this format:

```
[
  { "title": "Sony WH-1000XM5", "orig_url": "https://...", "product_ref": { "module_id": "Amazon", "unique_id": "us-B09MGVFLRR" } },
  ...
]
```

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

Paste that array into your AI prompt alongside the article request. The AI reads it and assigns `product_ref` automatically to every block it can match by product title. Only blocks it cannot match are left empty.

Without pasted product data, all product slots are left empty. You assign real products in WordPress:

1. Paste the article into the block editor.
2. Click a product-bound block (e.g. a product-card with "Unassigned product" in it).
3. In the right sidebar, click **Select product**.

The AI will list which blocks still need manual assignment at the end of its output — something like:

> "Assign products to: product-card (Logitech MX Master 3S), quick-picks row 1, row 2, row 3, comparison-table rows 1–3, where-to-buy (MX Master 3S)."

If you want an article with no product blocks at all, say so in your prompt ("no product blocks", "prose only", "explainer — no commerce"). The AI will still write reviews or guides, but in prose form without any product-bound blocks.

***

### Tips for better output

#### Plan first, generate second

For anything longer than a single block, ask the AI to propose an outline before generating the article. It's cheaper to tweak an outline than a 2,000-word draft.

> *"Plan a buying guide for portable monitors — don't generate blocks yet."*

Once the outline looks right, say *"go ahead and generate"*.

#### Name specific products

Vague prompts produce vague content. Instead of *"best headphones"*, say *"best headphones — Sony WH-1000XM5, Bose QC Ultra, Apple AirPods Max, Sennheiser Momentum 4, Anker Space One"*. The AI will use those exact products in product blocks and write around them.

#### Keep revisions small

Don't say *"rewrite the whole article with a different tone"*. Do say *"make the intro more conversational"* or *"shorten pick 2's description"*. Targeted revisions produce better results and waste fewer AI tokens.

#### Fact-check everything

AIs invent specs, prices, release dates, and feature lists. Treat every factual claim as a draft. Before publishing, verify:

* Product specifications
* Prices (these come from Content Egg automatically once products are assigned, but editorial mentions won't)
* Launch dates or version numbers
* Quoted review scores

#### Regenerate if structure is wrong

If the AI outputs something that doesn't look like valid markup, or mixes block types incorrectly, just say *"that's invalid, try again"*. The skill tells it to self-correct. If multiple attempts fail, you're probably using a weaker model — switch to a stronger one.

***

### FAQ / troubleshooting

#### The AI writes plain paragraphs instead of Egg Blocks

You're in conversation mode. Trigger block mode: prefix your message with `/blocks`, include *"as blocks"*, or name a specific block type.

#### The AI says it doesn't know what Egg Blocks are

It didn't read the skill URL. Ask it again: *"please fetch and read <https://www.keywordrush.com/skills/eggblocks-writer/SKILL.md>"*. If it still won't fetch URLs, copy the contents of that URL and paste them directly into the chat.

#### The AI invented block types that don't exist

Usually a weaker-model issue. Try a more capable model (Claude Sonnet/Opus, GPT-4+, Gemini Pro). If the problem persists, ask the AI to re-read the skill and list the 25 available blocks before generating.

#### I pasted the markup but some blocks look broken

Most "broken" blocks are caused by one of:

* **Truncated output** — the AI stopped mid-article. Ask it to continue.
* **A single missing product** — unassigned product slots render as empty cards. Assign products.
* **Wrong variant** — switch the variant in the sidebar.
* **Copy-paste artifacts** — you missed the opening or closing of the fenced code block. Recopy and repaste.

#### Can I generate content in a language other than English?

Yes. Ask in your target language, or add *"in German"* / *"write in Spanish"* to the prompt. The block schema itself is language-neutral — Egg Blocks render whatever text the AI produces.

#### Can I use this with a local LLM (Ollama, llama.cpp)?

Only if the model is capable enough to follow the schema and produce long structured output. Most 7B–13B local models aren't. Try a 70B+ model, or use the hosted options.

#### Does the AI have access to my Content Egg products?

No. The AI never sees your Content Egg data. It only produces editorial structure and leaves product slots empty for you to fill in WordPress. Your product catalog stays private.

#### Can the AI set prices or stock status?

No — and it shouldn't. Prices, stock, buy URLs, and merchant logos all come from Content Egg automatically once you assign a product. That's the whole point of product binding: prices update on a schedule so your articles never carry stale numbers.

#### What if the skill changes?

The skill is a plain text file at the URL. New versions of Egg Blocks may bring new block types or new variants. The skill is updated to match. If your AI is giving outdated output, ask it to re-fetch the URL in a fresh chat.

#### Where do I report issues with the skill?

If you find bugs, cases where the AI produces invalid markup consistently, or features you'd like supported, [contact Content Egg support](https://www.keywordrush.com/contact) with the exact prompt, the AI's response, and the model you used.


# Block Reference

Complete reference for all 25 Egg Blocks. Each entry lists the block's purpose, variants, fields, product binding, and related blocks. For concepts, getting started, and recipes, see the Introduction.

#### Block index

| Category                      | Blocks                                                                                                     |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Article Structure**         | callout · conclusion · faq · intro · section-header · step-list · toc                                      |
| **Editorial Insights**        | criteria · definitions · key-takeaways · methodology · myth-fact · pros-cons                               |
| **Product & Commerce**        | comparison-table · product-card · quick-picks · rating-breakdown · specifications · verdict · where-to-buy |
| **Conversion & Social Proof** | contextual-cta · pricing · testimonial · trust-signals                                                     |
| **Navigation**                | related-posts                                                                                              |
| **Core block**                | Paragraph (allowed as a fallback)                                                                          |

#### Common fields

Many blocks share the same header and TOC fields. They're documented once here; block entries below mention only the unique fields.

**Header fields**

Most blocks support a two-level header:

* **Section label** — small uppercase eyebrow text above the title (e.g. "Key takeaways", "Where to buy"). Often has a sensible default per block; leave empty to hide.
* **Title** — large bold heading for the block. Optional. Leave empty to hide.
* **Heading level** — `h1`, `h2`, `h3`, `h4`, or `div`. Default `h2`. Use `div` when you want the heading look without it counting as a document heading (useful for tables of contents).

**TOC metadata**

Blocks that support the table of contents expose four fields:

* **Anchor** — becomes the URL anchor (the `#something` at the end of the link) and the TOC jump target.
* **TOC label** — the text shown in the TOC.
* **Include in TOC** — toggle on to register this block in an auto-mode TOC.
* **Level** — TOC indent depth. Default `2`.

See Introduction → Table of contents integration for the full rules.

***

#### Rich text fields

Most block fields are plain text, but a few accept **basic rich text** — light HTML formatting such as a bold phrase, an inline link, or a short list inside the field. Everything not listed below is plain text, and typing HTML into a plain-text field shows the tags as literal characters instead of formatting.

**Allowed tags:** `p`, `ul`, `ol`, `li`, `strong`, `b`, `em`, `i`, `a` (with `href`, `rel`, `target`), `code`, `s`, `br`. Any other HTML is stripped when the block is saved.

| Block          | Fields that accept rich text              |
| -------------- | ----------------------------------------- |
| callout        | Body                                      |
| conclusion     | Summary                                   |
| faq            | Answer (per item)                         |
| intro          | Body                                      |
| step-list      | Description (per step), Note              |
| definitions    | Definition (per item)                     |
| key-takeaways  | Note                                      |
| methodology    | Description, Note, Description (per item) |
| myth-fact      | Fact text, Why (per item)                 |
| product-card   | Subtitle, Description                     |
| verdict        | Verdict text                              |
| contextual-cta | Text                                      |

***

#### Article Structure

**callout**

**Purpose.** Editorial aside for a note, tip, warning, or insight adjacent to prose.

**When to use.** Call out important context without breaking the main reading flow. Good for safety warnings in how-tos, editor's notes, disclaimers, and quick tips.

**Variants.**

* **Default** — standalone aside in article flow.
* **Compact** — nested or space-tight usage.

**Fields.**

| Field          | What it does                                                                     |
| -------------- | -------------------------------------------------------------------------------- |
| Callout type   | `note`, `tip`, `warning`, or `insight`. Controls color, icon, and default label. |
| Label override | Replace the default label for the chosen type. Optional.                         |
| Title          | Meaningful only in the default variant. Optional.                                |
| Body           | The callout content. Required.                                                   |

**Product binding.** None. **Header fields.** Title only (no section label). **TOC support.** No.

***

**conclusion**

**Purpose.** Closing summary block with optional takeaway bullets and next-step links.

**When to use.** End of a review, roundup, or guide. Wraps up the article and points readers toward logical next actions.

**Variants.**

* **Default** — full standalone article close.
* **Compact** — short wrap-up for nested or short-form contexts.

**Fields.**

| Field            | What it does                                       |
| ---------------- | -------------------------------------------------- |
| Points           | Bullet list of takeaways. Optional.                |
| Summary          | The main closing text. Required.                   |
| Next steps label | Eyebrow label above the next-step links. Optional. |
| Next steps       | Link list (text + URL). Use real URLs, not `#`.    |

**Product binding.** None. **Header fields.** Yes (section label, title, heading tag). **TOC support.** Yes.

***

**faq**

**Purpose.** Reader Q\&A block for common questions and SEO-friendly answer coverage. Outputs FAQPage structured data automatically so your FAQs can qualify for Google's FAQ rich results.

**When to use.** Bottom of any article. Especially useful for buying guides, reviews, and how-tos where readers arrive with specific questions.

**Variants.**

* **Default** — collapsible accordion.
* **Flat** — always-open static Q\&A list.

**Fields.**

| Field                | What it does                                                           |
| -------------------- | ---------------------------------------------------------------------- |
| Items                | Repeatable list of question + answer pairs. Both required.             |
| Collapsed by default | When on, accordion items start closed. Off by default.                 |
| Enable schema        | Output FAQPage structured data for Google rich results. On by default. |

**Product binding.** None. **Header fields.** Yes (section label defaults to "Frequently Asked Questions"). **TOC support.** Yes.

***

**intro**

**Purpose.** Article-opening orientation block with lead framing and optional preview list.

**When to use.** First block of most articles. Frames what the article is, who it's for, and what the reader will learn.

**Variants.**

* **Default** — full-length article intro.
* **Compact** — shorter intro when prose should stay tight.

**Fields.**

| Field        | What it does                                               |
| ------------ | ---------------------------------------------------------- |
| Lead         | The 1–2 sentence hook. Required.                           |
| Body         | Longer supporting prose. Optional. Works in both variants. |
| Points label | Eyebrow label above the preview bullets. Optional.         |
| Points       | Bullet list of article highlights. Optional.               |
| CTA label    | Button text. Optional.                                     |
| CTA URL      | Button target URL. Optional.                               |

**Product binding.** None. **Header fields.** Yes. **TOC support.** Yes.

***

**section-header**

**Purpose.** Named section opener for procedural steps or editorial framing before a grouped block.

**When to use.** Introduce a step in a guide, or frame a group of related blocks (e.g. a "Top Pick" cluster of product-card + pros-cons).

**Variants.**

* **Default** — step header in a guide sequence.
* **Accent** — stronger "Step N" treatment.
* **Editorial** — framing header before lists, grids, or grouped recommendations.

**Fields.**

| Field           | What it does                                                 |
| --------------- | ------------------------------------------------------------ |
| Step number     | For default/accent variants. Optional.                       |
| Title           | Main heading text. Required.                                 |
| Subtitle        | Supporting subhead. Optional.                                |
| Step label text | Override the "Step" word. Optional.                          |
| Kicker          | Small text above the title. Optional.                        |
| Meta            | Small text below the title. Optional.                        |
| Chips           | Tag-like labels. Most useful in editorial variant. Optional. |

**Product binding.** None. **Header fields.** Title + heading tag only (no separate section label — the block *is* a section header). **TOC support.** Yes.

***

**step-list**

**Purpose.** Ordered steps, checklist items, or scan-friendly instructional sequences.

**When to use.** How-to articles, setup guides, processes. Step numbers are derived from item order — no manual numbering.

**Variants.**

* **Default** — strict sequential process.
* **Checklist** — completeness-focused tasks where order is advisory.
* **Cards** — steps that need visual separation.
* **Card grid** — parallel-scanning overview.

**Fields.**

| Field | What it does                                                                 |
| ----- | ---------------------------------------------------------------------------- |
| Steps | Repeated title + description. Title required per step; description optional. |
| Note  | Small footer note. Optional.                                                 |

**Product binding.** None. **Header fields.** Yes (section label defaults to "Step List"). **TOC support.** Yes.

***

**toc**

**Purpose.** Table of contents for anchor navigation within the article.

**When to use.** Long-form articles (5+ major sections), roundups, buying guides. Improves scanability and supports in-article jump links.

**Variants.**

* **Default** — standard TOC with optional sub-items.
* **Compact** — dense flat TOC for many sections.
* **Numbered** — sequence-oriented TOC for listicles and guides.

**Fields.**

| Field        | What it does                                                                                     |
| ------------ | ------------------------------------------------------------------------------------------------ |
| Label        | Heading above the TOC. Optional.                                                                 |
| Source mode  | **Auto** pulls items from other Egg Blocks on the page; **Manual** uses the items you list here. |
| Items        | Manual-mode entries: text + anchor, with optional sub-items (default variant only).              |
| Collapsible  | Let readers collapse the TOC. On by default.                                                     |
| Default open | Whether a collapsible TOC starts open. On by default.                                            |

**Product binding.** None. **Header fields.** Label only (no separate section label / title pair). **TOC support.** N/A — this block *is* the TOC.

***

#### Editorial Insights

**criteria**

**Purpose.** Buying-criteria guidance — what to prioritize, what to look for, and what to avoid.

**When to use.** Buying guides and roundups to give readers a framework for evaluating products themselves.

**Variants.**

* **Default** — 2×2 panel treatment (best with 4 criteria).
* **List** — linear reading flow (best with 3–6 criteria).

**Fields.**

| Field    | What it does                                                                                     |
| -------- | ------------------------------------------------------------------------------------------------ |
| Criteria | Repeated items: title + description + importance (high/medium/low) + look-for text + avoid text. |

**Product binding.** None. **Header fields.** Yes (section label defaults to "What to look for"). **TOC support.** Yes.

***

**definitions**

**Purpose.** Glossary-style term and definition pairs for jargon, terminology, or spec explanations.

**When to use.** Explainer articles, technical reviews, or any content where readers might not know the terms.

**Variants.**

* **Default** — row-card glossary.
* **Compact** — lower-interruption inline glossary.
* **Inline** — integrated prose-adjacent terminology list.
* **Cards** — equal-weight 2-column grid.

**Fields.**

| Field | What it does                                        |
| ----- | --------------------------------------------------- |
| Items | Repeated term + definition. Best kept to 3–6 items. |

**Product binding.** None. **Header fields.** Yes (section label defaults to "Definitions"). **TOC support.** No.

***

**key-takeaways**

**Purpose.** Concise editorial insights or conclusions — separate from product-spec data.

**When to use.** Top of an article as an at-a-glance summary, or interspersed at section breaks. Not for raw specs or commerce facts — use `specifications` or product blocks for those.

**Variants.**

* **Default** — standalone icon list.
* **Compact** — nested or tight-column summary.
* **Inline** — prose-adjacent quick list.
* **Cards** — top-of-article or equal-weight takeaway grid.

**Fields.**

| Field | What it does                             |
| ----- | ---------------------------------------- |
| Items | Repeated text + optional title per item. |
| Note  | Small footer note. Optional.             |

**Product binding.** None. **Header fields.** Yes (section label defaults to "Key Takeaways"). **TOC support.** Yes.

***

**methodology**

**Purpose.** Explains how recommendations were evaluated — adds credibility and transparency.

**When to use.** Roundups, buying guides, and any content where readers should trust your selection process. Strong E-E-A-T signal.

**Variants.**

* **Default** — parallel criteria list.
* **Timeline** — ordered evaluation process.
* **Grid** — compact 2×2 methodology overview (best with 4 items).

**Fields.**

| Field       | What it does                                                                                   |
| ----------- | ---------------------------------------------------------------------------------------------- |
| Description | Block-level lead text. Optional.                                                               |
| Items       | Repeated items. In default/timeline: title + description. In grid: icon + title + description. |
| Note        | Small footer note. Optional.                                                                   |

**Product binding.** None. **Header fields.** Yes. **TOC support.** Yes.

***

**myth-fact**

**Purpose.** Debunks misconceptions as myth/fact pairs or verdict-rated claims.

**When to use.** Educational articles, category explainers, or when you want to counter common misunderstandings.

**Variants.**

* **Default** — full myth vs. fact treatment with optional explanation row.
* **Inline** — fast-scanning claim-verdict list.

**Fields.**

| Field           | What it does                                                                                                                        |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Items           | Repeated: myth text, fact text, optional "why" explanation, verdict badge, verdict tone (true/false/partial/neutral), verdict text. |
| Label overrides | Rename "Myth", "Fact", "Why". Optional.                                                                                             |

**Product binding.** None. **Header fields.** Yes (section label defaults to "Myth vs Fact"). **TOC support.** No.

***

**pros-cons**

**Purpose.** Structured strengths and weaknesses summary for a product or recommendation.

**When to use.** Reviews, product evaluations, and anywhere readers need a quick trade-off snapshot.

**Variants.**

* **Default** — standalone review assessment.
* **Compact** — nested inside shared layouts.
* **Highlight** — high-attention summary near top of article.
* **Inline** — minimal prose-adjacent aside.

**Fields.**

| Field           | What it does                                                  |
| --------------- | ------------------------------------------------------------- |
| Pros            | List of strengths. 4–12 words each.                           |
| Cons            | List of weaknesses. 4–12 words each.                          |
| Best for        | Who benefits most. Optional.                                  |
| Not for         | Who should skip. Optional.                                    |
| Quick take      | One-sentence verdict. Optional.                               |
| Label overrides | Change default labels ("Pros" → "Strengths", etc.). Optional. |

**Product binding.** None. **Header fields.** None — no section label or title. **TOC support.** No.

***

#### Product & Commerce

**comparison-table**

**Purpose.** Multi-product comparison table with shared criteria across rows.

**When to use.** Roundups (3+ products) and head-to-head comparisons (exactly 2 products).

**Variants.**

* **Default** — standard side-by-side comparison, 3+ products.
* **Versus** — head-to-head comparison, exactly 2 products.
* **Product list** — dense quick-reference table where criteria become columns.

**Fields.**

| Field         | What it does                                                                                                                                                                                          |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Heading label | Small eyebrow above the table heading. Optional.                                                                                                                                                      |
| Heading title | Main table heading. Optional.                                                                                                                                                                         |
| Heading level | Default is a plain `div` (no document heading). Set to `h2` or `h3` if you want the title to count as a heading.                                                                                      |
| CTA label     | Text for row-level buttons. Optional.                                                                                                                                                                 |
| Footer note   | Small note below the table. Optional.                                                                                                                                                                 |
| Items         | Rows — each needs a Content Egg product plus optional title, role label, and "winner" flag.                                                                                                           |
| Criteria      | Columns — each has a label, a value type (text, score, stars, yes/no, or price), and a value per row. For the **price** type the live price comes from Content Egg, so any value you type is ignored. |

**Product binding.** Required per row. **Header fields.** Uses its own heading label and title fields instead of the shared section label / title pair. **TOC support.** Yes.

***

**product-card**

**Purpose.** Single product recommendation card bound to a Content Egg product.

**When to use.** Featured product blocks, top-pick callouts, or per-product cards in roundups.

**Variants.**

* **Default** — standard recommendation card.
* **Featured** — top-pick or lead recommendation.
* **Compact** — lower-ranked scan-friendly row.

**Fields.**

| Field       | What it does                                                                 |
| ----------- | ---------------------------------------------------------------------------- |
| Product     | The Content Egg product (module + unique ID) this card represents. Required. |
| Title       | Your editorial title override for the product. Optional.                     |
| Subtitle    | Short positioning line. Hidden in compact.                                   |
| Merchant    | Merchant name override. Optional.                                            |
| Badge       | Small status tag (e.g. "Editor's Pick"). Hidden in compact.                  |
| Rank        | Rank number for roundup usage. Optional.                                     |
| Score       | Editorial score. Hidden in compact.                                          |
| Description | 1–2 sentence explanation. Hidden in compact.                                 |
| Chips       | Short feature tags (max \~4). Hidden in compact.                             |
| CTA label   | Button text override. Optional.                                              |

**Product binding.** Required. **Header fields.** The block has its own separate "Block title" field (so it doesn't clash with the product's own title), plus optional section label and heading level. Skip these when using the card inside a roundup; fill them in for a standalone featured callout. **TOC support.** No.

***

**quick-picks**

**Purpose.** Multi-product shortlist driven by Content Egg — a ranked list with editorial overrides.

**When to use.** Roundup "at-a-glance" sections, alternatives lists, or "best in category" shortlists.

**Variants.**

* **Default** — ranked shortlist.
* **Compact** — tighter ranked list.
* **Alternatives** — "consider instead" set after a lead recommendation.
* **Shelves** — grouped by use case rather than rank.
* **Grid** — finalists matrix.
* **Highlight** — lead pick plus supporting picks.

**Fields.**

| Field     | What it does                                                                                                                                                      |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CTA label | Row-level button text. Optional.                                                                                                                                  |
| Items     | Rows — each needs a Content Egg product plus optional editorial overrides (title, subtitle, merchant, badge, description, chips, score). Row order sets the rank. |

**Product binding.** Required per row. **Header fields.** Yes (section label defaults to "Quick picks"). **TOC support.** Yes.

***

**rating-breakdown**

**Purpose.** Visual score breakdown for one product — overall score plus per-category scores.

**When to use.** Review articles with quantified evaluation. Pairs well with `verdict` and `pros-cons`.

**Variants.**

* **Default** — main review score breakdown.
* **Compact** — space-constrained score view.
* **Grid** — hero-score treatment with category grid. Best with 6 categories; extras are clamped.
* **Category grid** — category-only scoring without overall score.

**Fields.**

| Field               | What it does                                       |
| ------------------- | -------------------------------------------------- |
| Overall score       | Main 0–10 score. Ignored in category-grid variant. |
| Overall denominator | Denominator text. Default "out of 10".             |
| Stars               | Star rendering (0–5). Ignored in category-grid.    |
| Categories          | Per-category label + score pairs.                  |

**Product binding.** Optional. By default the block shows editorial scores only; binding a product lets the button link to the merchant through Content Egg. **Header fields.** None. **TOC support.** No.

***

**specifications**

**Purpose.** Structured factual spec display for a product.

**When to use.** Spec tables in reviews and product deep-dives.

**Variants.**

* **Default** — full spec grid with icons.
* **Compact** — nested label/value table.
* **Highlight** — at-a-glance stat band.

**Fields.**

| Field | What it does                                                       |
| ----- | ------------------------------------------------------------------ |
| Specs | Rows — each with an icon (default variant only), value, and label. |

**Product binding.** None. **Header fields.** Yes in default variant only. Section label defaults to "Key specs" when empty; compact and highlight variants render no header. **TOC support.** No.

***

**verdict**

**Purpose.** Single-product editorial verdict with score, summary, and CTA.

**When to use.** End of a review article, summarizing the overall take in one block.

**Variants.**

* **Default** — standard review conclusion block.
* **Compact** — lighter-weight inline verdict.
* **Summary** — full visual closing verdict.

**Fields.**

| Field             | What it does                                                                                                                            |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Score             | Overall score. Optional.                                                                                                                |
| Score denominator | Default "/ 10".                                                                                                                         |
| Score label       | Only meaningful in summary variant. Optional.                                                                                           |
| Title             | Verdict headline. Optional.                                                                                                             |
| Award label       | "Editor's Choice", "Best Value", etc. Optional.                                                                                         |
| Chips             | Short highlights (not prose). Optional.                                                                                                 |
| Verdict text      | The main verdict paragraph. Required.                                                                                                   |
| CTA label         | Button text. Optional.                                                                                                                  |
| CTA URL           | Button target. Optional.                                                                                                                |
| Product           | Link to a Content Egg product. Optional, but recommended when you want the button URL to come from Content Egg with affiliate tracking. |
| Band label        | Only meaningful in summary variant. Optional.                                                                                           |

**Product binding.** Optional. **Header fields.** Title only. **TOC support.** No.

***

**where-to-buy**

**Purpose.** Multi-offer merchant block backed by Content Egg — buying options and price comparison.

**When to use.** Near the end of review articles, or as a standalone offer table. Ideal when the article isn't a roundup but still needs clear purchase paths.

**Variants.**

* **Default** — full multi-merchant comparison.
* **Compact** — tighter offer list.
* **Table compact** — densest table layout.

**Fields.**

| Field       | What it does                                                                                                                                                                             |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CTA label   | Row button text override. Optional.                                                                                                                                                      |
| Footer note | Small disclosure or shipping note. Optional.                                                                                                                                             |
| Items       | Offer rows — each needs a Content Egg product, plus optional merchant override, title, and chips. Live price, stock, buy URL, and merchant logo all come from Content Egg automatically. |

**Product binding.** Required per row. **Header fields.** Yes (section label defaults to "Where to buy"). **TOC support.** Yes.

***

#### Conversion & Social Proof

**contextual-cta**

**Purpose.** Single-action conversion block for in-article calls-to-action — a headline, supporting text, and one or two buttons.

**When to use.** Mid-article or end-of-section prompts. Good for "try now", "check price", "get the deal", or "read our review" moments where you want to drive a specific action without the full weight of a product card.

**Variants.**

* **Default** — centered standalone CTA block.
* **Highlight** — higher-contrast treatment for above-the-fold or section-break placement.
* **Inline** — compact side-by-side layout that sits inside prose without heavy visual interruption.
* **Split** — two-column layout with logo or image on one side and action on the other.

**Fields.**

| Field           | What it does                                                                                             |
| --------------- | -------------------------------------------------------------------------------------------------------- |
| Eyebrow         | Small text above the headline. Optional.                                                                 |
| Headline        | Main heading. Required if no primary button label is set.                                                |
| Text            | Supporting body copy. Optional.                                                                          |
| Primary label   | Primary button text. Required if no headline is set.                                                     |
| Primary URL     | Primary button target. Set manually or resolved from a Content Egg product via **Primary URL source**.   |
| Primary meta    | Small text below the primary button — useful for price, savings, or "no credit card required". Optional. |
| Secondary label | Secondary button or link text. Optional.                                                                 |
| Secondary URL   | Secondary button target. Set manually or resolved from Content Egg via **Secondary URL source**.         |
| Context         | Small note alongside the buttons (e.g. "Affiliate link"). Optional.                                      |
| Logo            | Merchant logo. Resolved automatically from the bound Content Egg product, or set a custom URL. Optional. |

The block renders nothing if both **Headline** and **Primary label** are empty.

**Product binding.** Optional. Bind a Content Egg product to auto-populate the primary button URL with an affiliate link and pull the merchant logo. The secondary URL can also resolve from a product independently. **Header fields.** Heading tag only — the **Headline** field is the block's title; there is no separate section label. **TOC support.** No.

***

**pricing**

**Purpose.** Structured pricing block for service tiers, SaaS plans, and editorial price comparisons.

**When to use.** Software reviews, hosting comparisons, subscription service roundups, and any article where you need to present multiple pricing tiers side by side. Also useful for affiliate articles covering services rather than physical products.

**Variants.**

* **Pricing list** — compact stacked list, good for 3–6 tiers.
* **Pricing cards** — equal-weight card grid, best with 2–4 tiers.
* **Pricing highlight** — one featured plan plus supporting options.

**Fields.**

| Field              | What it does                                                                                                                                                          |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Title              | Block heading. Optional.                                                                                                                                              |
| Intro text         | Short lead above the pricing tiers. Optional.                                                                                                                         |
| General price note | Small disclaimer below all prices (e.g. "Prices correct at time of writing"). Optional.                                                                               |
| Promotions         | Repeatable promo banners — each has a title and description. Displayed above the tier list. Optional.                                                                 |
| CTA label          | Default button text applied to all items that don't have their own. Optional.                                                                                         |
| CTA URL            | Default button URL. Set manually or resolved from a Content Egg product via **CTA URL source**.                                                                       |
| Featured label     | Label shown on the featured item (default: "Most popular"). Optional.                                                                                                 |
| Items limit        | Maximum number of tiers rendered. Default 6.                                                                                                                          |
| Items              | Repeatable pricing tiers — each has: **Name** (required), description, price, price from, price to, billing period, features list, featured flag, CTA label, CTA URL. |

The block renders nothing if no items have a name.

**Product binding.** Optional. The block-level CTA URL can be auto-resolved from a Content Egg product, useful when the pricing page is an affiliate destination. **Header fields.** Title + heading tag (no section label). **TOC support.** No.

***

**testimonial**

**Purpose.** Customer or user quotes for social proof, with optional aggregate rating.

**When to use.** Product reviews and service comparisons where real user feedback strengthens credibility. Can show a single featured quote, a cluster of reviews, or an inline citation.

**Variants.**

* **Default** — single or multi-quote display with optional aggregate score.
* **Cards** — grid of equal-weight review cards. Good for 2–4 quotes.
* **Inline** — compact citation that sits within prose without heavy visual weight.

**Fields.**

| Field            | What it does                                                                                                                   |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Title            | Block heading. Optional.                                                                                                       |
| Aggregate rating | Overall score (e.g. 4.7). Optional.                                                                                            |
| Rating max       | Denominator for the aggregate score. Default 5.                                                                                |
| Review count     | Total number of reviews the aggregate is based on. Optional.                                                                   |
| Rating source    | Platform or source name shown next to the aggregate (e.g. "Trustpilot"). Optional.                                             |
| Items            | Repeatable quotes — each needs a **Quote** and **Author** (both required), plus optional attribution and per-item star rating. |

The block renders nothing if no items have both a quote and an author.

**Product binding.** Optional. In auto data-source mode the block can pull aggregate rating data from a bound Content Egg product. **Header fields.** Title + heading tag (no section label). **TOC support.** No.

***

**trust-signals**

**Purpose.** Institutional proof signals — aggregate review score, numeric metrics, and trust badges.

**When to use.** Near the top of a review or comparison to establish credibility before the reader reaches the details. Also effective in `where-to-buy` or `verdict` contexts to reinforce confidence before a purchase decision.

**Variants.**

* **Default** — prominent display with score, metrics, and badges in a structured layout.
* **Inline** — compact horizontal strip, good for placing inside a product cluster without visual interruption.

**Fields.**

| Field            | What it does                                                                                                                  |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Aggregate rating | Overall score (e.g. 4.8). Optional.                                                                                           |
| Rating max       | Denominator for the aggregate score. Default 5.                                                                               |
| Review count     | Total number of reviews the aggregate is based on. Optional.                                                                  |
| Rating source    | Platform or source name (e.g. "Amazon", "G2"). Optional.                                                                      |
| Metrics          | Repeatable stat callouts — each has a **Value** (required, e.g. "30,000+") and a **Label** (e.g. "happy customers").          |
| Badges           | Repeatable trust badges — each has a **Label** (required) and an **Icon** (`shield-check`, `patch-check`, or `check-circle`). |

The block renders nothing if aggregate, metrics, and badges are all empty.

**Product binding.** Optional. In auto data-source mode the block can pull aggregate rating data from a bound Content Egg product. **Header fields.** None. **TOC support.** No.

***

#### Navigation

**related-posts**

**Purpose.** Internal navigation block linking to related articles on your site.

**When to use.** End of article, mid-article section breaks, or as a standalone "related reading" section. You pick the posts; the block pulls titles, excerpts, and thumbnails from WordPress automatically.

**Variants.**

* **Compact** — text-only chevron list with optional snippets. 3–6 items. Good for tight spaces.
* **Media list** — thumbnail + badge + title + excerpt rows. 3–5 items.
* **Cards** — 2-column grid with cover images. 4 items recommended.
* **Featured** — hero card (first item) + thumbnail list (remaining). 4–6 items.

**Fields.**

| Field | What it does                                                                                                                                                                                                |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Items | Repeatable list of posts — each has a WordPress post ID plus optional title, badge, and snippet overrides. When overrides are empty, the block falls back to the post's title, first category, and excerpt. |

**Notes.**

* Items pointing to a post that no longer exists are skipped silently.
* Scheduled posts render as plain text without a link.
* Item order sets visual hierarchy — in the featured variant, the first item becomes the hero card.

**Product binding.** None. **Header fields.** Section label only (defaults to "Related Articles" if not overridden). **TOC support.** No.

***

#### Core block

**Paragraph**

The standard Gutenberg **Paragraph** block isn't an Egg Block, but it's fine to use as a fallback for short connecting prose between major sections where no Egg Block fits — for example, a one-sentence lead-in before a comparison table.

Most editorial prose should live inside Egg Block fields instead: the intro body, conclusion summary, callout body, key-takeaway note, section-header subtitle, methodology description, or a dedicated callout block. Reach for those first.

Other core Gutenberg blocks (Heading, List, Quote, Image, Table, Columns, and so on) shouldn't be used alongside Egg Blocks — each has a semantic Egg Block equivalent (section-header, key-takeaways, pros-cons, callout, specifications, comparison-table, step-list, faq).


# Introduction

Connect your own AI assistant — ChatGPT, Claude, or another — to run Content Egg for you: find products, build review pages, edit prices, and more.

Agent Access lets you connect your own AI assistant to your website so it can operate Content Egg for you. You ask for something in plain language — "find the best robot vacuums and build me a comparison page" — and your assistant does the real work inside the plugin, using your permissions.

It's the same plugin you already use, just driven by conversation instead of clicks.

### Watch it in action

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

### What it can do for you

Once connected, your assistant can:

* **Find and compare products** across your affiliate networks
* **Build a review or roundup page** from Egg Blocks — intro, comparison table, pros and cons, FAQ, verdict
* **Add a live price list** to a post you're writing yourself
* **Edit products** — change a title, fix a price, reorder or remove items
* **Refresh prices** on an existing post
* **Set up product feeds** from a CSV or XML file
* **Check your setup** — which modules are active, whether your license is fine

### What you'll need

* **Content Egg Pro** — required for the actions your assistant performs: building pages, editing products, and updating settings.
* **WordPress 6.9 or newer** — Agent Access is built on the WordPress Abilities API, which ships with WordPress 6.9.
* **A WordPress application password** — a special password just for your assistant (you'll create one in the next step).
* **An AI assistant that can connect to your site** — Claude, a ChatGPT Custom GPT, or an agent/coding tool like Claude Code or Cursor. A free plan is enough to get started; you don't need a desktop app or any coding.

### How it works

1. You flip a switch to turn Agent Access on.
2. You create an application password and give it to your assistant.
3. You ask your assistant to do things — and it uses Content Egg the way you would, limited to what your WordPress account is allowed to do.

Every action it takes is written to an activity log you can review, and your API keys and secrets are never shown to it.

**Tip for the best results:** let your assistant research the market and agree on which products to feature *before* it searches or builds — see [**Example prompts & workflows**](/ai-agents/prompts-and-workflows).

{% hint style="success" %}
**The quickest way to start — no special setup.** If your assistant can act on your behalf (agent and coding tools such as Claude Code or Cursor are perfect for this), you don't need to configure anything: paste your **agent guide link** into the chat, give it your WordPress username and application password, and ask it to do something. It reads the guide and gets to work. The Connect pages below are for building a reusable, always-ready connection in ChatGPT or Claude.
{% endhint %}

### Next steps

* [**Turning on Agent Access**](/ai-agents/turning-on-agent-access) — the one-time setup.
* Then connect your assistant: [**ChatGPT**](/ai-agents/connect-chatgpt), [**Claude**](/ai-agents/connect-claude), or [**any other assistant**](/ai-agents/connect-other).
* [**Example prompts & workflows**](/ai-agents/prompts-and-workflows) — the things people actually ask for, ready to copy and paste.


# Turning on Agent Access

Enable Agent Access and create the login your assistant will use — the one-time setup before connecting any AI.

This is a one-time setup. Once it's done, you can connect ChatGPT, Claude, or any other assistant in a couple of minutes.

### Step 1 — Enable Agent Access

Go to **Content Egg → AI Agents**, tick **Enable Agent Access**, and click **Save**.

<figure><img src="/files/oJPnlrAKvb4RhOBUAnQ7" alt=""><figcaption><p>Content Egg → AI Agents — the master switch</p></figcaption></figure>

That's the master switch. When it's off, no assistant can reach your site, no matter what password it has.

### Step 2 — Create an application password

Your assistant logs in with a **WordPress application password** — a special password you generate once, separate from your normal login. On the AI Agents page, click **Create an application password** (it takes you straight to your profile), or go to **Users → Profile → Application Passwords**.

Give it a recognizable name, like `ChatGPT` or `Claude`, and click **Add New Application Password**. WordPress shows you the generated password **once** — copy it now and keep it somewhere safe. You'll paste it into your assistant in the next step.

<figure><img src="/files/vDuqKdFcmzlO0R7G3p1H" alt=""><figcaption><p>Users → Profile → Application Passwords</p></figcaption></figure>

{% hint style="info" %}
**Tip: make a dedicated user for your assistant.** Create a separate WordPress user (for example an Editor named "AI Assistant") and generate the application password for *that* user. Then everything your assistant does is clearly attributed to it in the activity log, you can limit exactly what it's allowed to do, and you can cut off access cleanly by deleting that one user — without touching your own account.
{% endhint %}

### Step 3 — Find your connection links

Below the switch, **Connect your assistant** has a tab for each assistant — **ChatGPT**, **Claude** and **Other tools**. Open the one you're using and it shows the short instructions and the exact links for that assistant:

* **Agent guide** — a plain-language playbook your assistant reads to learn your site's abilities and rules. Every tab has it, because every assistant needs it: the **text** for ChatGPT, the **link** for everything else.
* **OpenAPI — ChatGPT profile** — the action list for a ChatGPT Custom GPT (trimmed to fit ChatGPT's limits, POST-only).
* **OpenAPI — Full profile** — every operation, for other HTTP clients and code generators.
* **MCP endpoint** — optional, for Cursor and other MCP apps (it only appears when the free WordPress MCP Adapter plugin is active).

<figure><img src="/files/8rP1DvLv8b8UkHPCV8Qw" alt=""><figcaption><p>Your site's connection links, shown on the AI Agents page</p></figcaption></figure>

You don't need all of them — your assistant's tab shows only what it uses. Keep this page handy; it's the source of truth for your site's exact links.

### The activity log

At the bottom of the page, **Recent activity** lists every action your assistant has taken — who did it, which action, when, and whether it succeeded.

<figure><img src="/files/pWmPoSnHw3HAMrAuk9e5" alt=""><figcaption><p>Every action your assistant takes is logged</p></figcaption></figure>

Nothing your assistant does is hidden. If you ever want to know what happened, this is where you look — more on staying in control in [**What your assistant can and can't do**](/ai-agents/safety-and-permissions).

### Next: connect your assistant

* [**Connect ChatGPT**](/ai-agents/connect-chatgpt)
* [**Connect Claude**](/ai-agents/connect-claude)
* [**Connect any other assistant**](/ai-agents/connect-other)


# Connect ChatGPT

Give ChatGPT the keys to your Content Egg site using a Custom GPT Action and your OpenAPI link.

You'll connect ChatGPT by creating a **Custom GPT** with an **Action** that points at your site. ChatGPT reads your site's OpenAPI link, learns what it can do, and logs in with your application password.

### Watch it in action

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

**Before you start,** finish [**Turning on Agent Access**](/ai-agents/turning-on-agent-access). You'll need two things from it:

* Your **OpenAPI link** (shown on the AI Agents page, ends in `/wp-json/content-egg/v1/openapi`).
* Your WordPress **username** and the **application password** you created.

{% hint style="info" %}
Creating and using Custom GPTs requires a paid ChatGPT plan (Plus, Pro, or Team/Enterprise) — that's an OpenAI requirement, not a Content Egg one. **You don't have to use a Custom GPT, though.** Any assistant that can make web requests for you — an agent or coding tool like Claude Code or Cursor — can skip this page entirely: just hand it your [**agent guide link**](/ai-agents/advanced), give it your login, and ask. A Custom GPT is simply the most convenient way to get a reusable ChatGPT that already knows your site.
{% endhint %}

### Step 1 — Create a GPT

In ChatGPT, open the sidebar, choose **GPTs → Create**, then switch to the **Configure** tab. Give it a name like "My Content Egg Assistant."

<figure><img src="/files/lKIOwRFHF2OmYr9gIfkV" alt=""><figcaption><p>GPTs → Create, then the Configure tab</p></figcaption></figure>

### Step 2 — Add the Action

Scroll to **Actions** and click **Create new action**. Choose **Import from URL** and paste your **OpenAPI link** (copy it from the AI Agents page). ChatGPT reads it and fills in the list of things it can do on your site.

{% hint style="info" %}
ChatGPT limits a Custom GPT Action to **30 operations**, so the OpenAPI link on the AI Agents page is a **ChatGPT-sized profile** — it leaves out a few admin/rarely-used actions (module refresh/deactivate, feed status, connect-a-shop, multi-network search) to fit. Those still work in **Claude** and other clients, or directly in wp-admin. If you paste the *un-trimmed* spec instead, ChatGPT saves it but then fails at run time with a generic "something went wrong."
{% endhint %}

<figure><img src="/files/BaBhZlmL7IOWCQkoAKnF" alt=""><figcaption><p>The Configure tab — scroll to Actions and click Create new action</p></figcaption></figure>

<figure><img src="/files/1yyWUO0bej1ddbqHwLNr" alt=""><figcaption><p>Import from URL — paste your OpenAPI link</p></figcaption></figure>

### Step 3 — Set up authentication

ChatGPT's Actions don't have separate username and password boxes — there's a single secret field. So you give ChatGPT your login as one encoded value:

1. Set **Authentication** to **API Key**.
2. Set **Auth Type** to **Basic**.
3. In the **API Key** box, paste your **base64 token** (see below).

**The easy way — build it on the AI Agents page.** Go to **Content Egg → AI Agents**, open the **ChatGPT** tab under **Connect your assistant**, and expand **"Make a Basic auth token"**. Confirm your username, paste your **application password**, and click **Copy**. The token is built right in your browser — nothing is sent anywhere — so you don't need a terminal or any other tool. Paste it into ChatGPT's **API Key** box.

<figure><img src="/files/VgfzaWBRN2j6Ukj5xUTM" alt=""><figcaption><p>Make a Basic auth token on the AI Agents page — no terminal needed</p></figcaption></figure>

<figure><img src="/files/EJPBqqhkef7Rj0EkUp19" alt=""><figcaption><p>Authentication → API Key, Auth Type → Basic, with your encoded login</p></figcaption></figure>

### Step 4 — Give it the guide (don't skip this)

This is the step that makes the assistant genuinely good at your site. Without it, ChatGPT only knows the raw API and tends to build pages with Markdown tables and bare product blocks. With it, it follows your site's workflows and picks the right block every time.

In the GPT's **Instructions** box (the big field near the top of the Configure tab), add a line pointing to your guide — copy the URL from the **Agent guide** row on the AI Agents page (**Copy link**):

> Before building or editing any page, read this guide first and follow it: <https://YOUR-SITE.com/wp-json/content-egg/v1/agent-guide>

ChatGPT fetches it on the first request using its built-in **Web Browsing** (on by default: Configure tab → **Capabilities**).

<figure><img src="/files/YFzeWPFTpEE33lACbXPX" alt=""><figcaption><p>Add the agent guide to the GPT's Instructions</p></figcaption></figure>

### Step 5 — Save it privately, then test

Click **Create** (top right) to save. ChatGPT asks who can use the GPT — choose **Only me**.

<figure><img src="/files/VD4tf2Gc4a3AjTCUCZIG" alt=""><figcaption><p>Save the GPT as “Only me”</p></figcaption></figure>

{% hint style="warning" %}
**Keep this GPT set to "Only me."** It carries an Action wired to your site with your application password baked in. Sharing it ("Anyone with the link" or publishing to the GPT Store) would hand other people a GPT that can act on your WordPress site. To cut off access later, delete the GPT and revoke that application password under **Users → Profile → Application Passwords**.
{% endhint %}

Now start a chat with it and try:

> **What can you do with Content Egg on my site? List my active modules.**

You should get a short summary of your setup and a list of your active modules.

<figure><img src="/files/CYvxHf2EvluFecawcqb6" alt=""><figcaption><p>ChatGPT reporting your active modules</p></figcaption></figure>

If that works, you're connected. Head to [**Example prompts & workflows**](/ai-agents/prompts-and-workflows) for what to ask next.

### If something goes wrong

* **"Unauthorized" / 401 or 403** — the encoded login is wrong. Re-generate the base64 of `username:application_password`, make sure you used the **application password** (not your normal login password), and check there's a single `:` between the username and the password before encoding.
* **The assistant says it can't reach your site** — make sure the **Enable Agent Access** switch is on, and that your site is served over **HTTPS**.
* **It can find products but can't build pages or edit anything** — the read actions work on any plan, but building and editing require **Content Egg Pro**.


# Connect Claude

Connect Claude to your site in about two minutes: allow your domain, hand over the guide, and start building.

Claude works on your site directly over the WordPress REST API. Allow your domain in Claude's settings, give it your WordPress login, and point it at your site's agent guide — about two minutes, and it's ready to build.

### Watch it in action

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

The whole flow end to end: connecting Claude to your site with no MCP, monetising an existing draft with product blocks and a featured image, rebuilding its structure with Egg Blocks, then putting the lot on a **scheduled task** that publishes a new article every day.

{% hint style="success" %}
**Using Claude Code?** Skip step 1 — [**Claude Code**](https://www.anthropic.com/claude-code) (Anthropic's terminal tool) already reaches your site. Go straight to step 2.
{% endhint %}

### 1. Allow your site's domain

Claude runs code in a sandbox that can only reach domains you've approved. Your site has to be on that list.

1. In Claude, open **Settings → Capabilities**.
2. Check that **Cloud code execution and file creation** and **Allow network egress** are both on — they normally are. Switch on whichever isn't; the domain list below does nothing without them.
3. Under **Domain allowlist → Additional allowed domains**, type your site's domain and click **Add**.

The **Content Egg → AI Agents** page shows the exact domain to paste, on its **Claude** tab. Use the host your site actually runs on — if that's `www.example.com`, add that rather than the bare version, or add `*.example.com` to cover both.

You can leave the **Domain allowlist** dropdown on its default: whatever it's set to, the domains you add below are allowed on top of it. (Selecting **All domains** works too, and saves you adding anything — it also lets Claude reach every other site on the internet, so add your own domain instead unless you have a reason not to.)

Restart Claude afterwards so it picks up the new setting.

<figure><img src="/files/Y3JHX9S9XCL2Tr5V6Mgw" alt=""><figcaption><p>Adding your site's domain in Claude's Settings → Capabilities</p></figcaption></figure>

{% hint style="info" %}
**On a Team or Enterprise plan?** This capability is off by default and controlled by your organization's owner in **Organization settings → Capabilities**. If you can't find the setting, that's why — ask your admin to enable it and allow your domain.
{% endhint %}

### 2. Give Claude your login details

From [**Turning on Agent Access**](/ai-agents/turning-on-agent-access) you'll have your WordPress **username** and an **application password**. Paste both into the chat when you start working.

{% hint style="warning" %}
**Anything you type in a chat stays in that conversation.** Use a dedicated WordPress user for Claude rather than your own admin account, and revoke the application password when you're done with it — see [**Where your password ends up**](/ai-agents/safety-and-permissions#where-your-password-ends-up).
{% endhint %}

### 3. Give it the guide (don't skip this)

Credentials let Claude *reach* your site; the guide teaches it how to **use** it. Without the guide it tends to build pages with Markdown tables and bare product blocks instead of the right Content Egg blocks.

Copy your **Agent guide** link from the AI Agents page (**Copy link**) and open a chat with something like:

> Read this guide and follow it when working on my site: `https://YOUR-SITE.com/wp-json/content-egg/v1/agent-guide` My WordPress username is `USERNAME` and the application password is `xxxx xxxx xxxx xxxx xxxx xxxx`.

That's the whole setup. Claude reads the guide, learns your site's abilities, and gets to work.

<figure><img src="/files/6JOhH3x65OHvoJJBSq21" alt=""><figcaption><p>Starting a chat with the agent guide link and credentials</p></figcaption></figure>

### 4. Better: put it all in a Project

Pasting the guide link and your login into every new chat gets old fast. A **Project** carries them for you, and it's what scheduled tasks need later on — so it's worth the two minutes.

Create a Project, name it anything, and fill in two fields:

* **Instructions** — your Agent guide URL. Claude reads the guide before it touches your site.
* **Context** (or Project knowledge) — your WordPress username and the application password.

Every chat you start inside that Project now arrives knowing how to reach your site. Nothing to paste.

{% hint style="warning" %}
The password is then stored in the Project and available to every chat in it. That's exactly why you should connect a **dedicated WordPress user** rather than your own admin account — see [**Where your password ends up**](/ai-agents/safety-and-permissions#where-your-password-ends-up).
{% endhint %}

### Test it

Start a chat and try:

> **Using Content Egg, show my active modules and search Amazon for wireless earbuds.**

Claude should list your active modules and come back with a few products and prices.

<figure><img src="/files/odXWyNjphpQTKkWGOagR" alt=""><figcaption><p>Claude listing modules and searching for products</p></figcaption></figure>

If that works, you're connected. See [**Example prompts & workflows**](/ai-agents/prompts-and-workflows) for what to ask next.

### Run it on a schedule

Claude can run a saved prompt on a schedule — daily, weekly, whatever cadence you set. That's the step that turns "an assistant that builds pages when I ask" into a publishing routine that runs without you: research the topic, find the products, build the article, publish it.

Scheduled tasks work best from inside the **Project** you set up above, because the Project already carries your guide URL and login into every run.

1. Open your Project and create a **scheduled task**.
2. Paste the prompt — the entire job, start to finish.
3. Turn on **Skip all approvals**, so it doesn't stop mid-run waiting for a confirmation nobody's there to give.
4. Choose the frequency — **Daily**, weekly, or your own interval — and save.
5. **Run now** tests it straight away, without waiting for the first scheduled run.

Runs happen in the cloud, so your computer doesn't have to be on. Each completed run keeps its own record — you can open it later and read Claude's reasoning alongside the article it built.

{% hint style="warning" %}
**Every run starts a fresh session with no memory.** Claude has no idea what it wrote yesterday or last week. Left to itself it will cheerfully publish the same article twice — so give it a **topic queue** in the prompt and tell it to check your existing posts before picking the next one.
{% endhint %}

A daily-publishing task prompt looks roughly like this:

> Follow the Content Egg Agent Guide for my site. The guide URL and login details are in this Project's Context.
>
> Use the topic queue below. **First search my existing posts and skip anything already covered**, then take the next topic that isn't:
>
> * Burr Grinder vs. Blade Grinder: Which Is Better?
> * …
>
> Write the article, find a relevant product for each section with Content Egg and add product blocks, set a featured image, and publish it.

### What else is worth scheduling

* **Topic research** — trends and article ideas on a weekly cadence, so you always have a queue.
* **Out-of-stock cleanup** — find products that have gone out of stock and replace them.
* **Featured images and media** for newly published posts.
* **Price refreshes** on your top-performing reviews.

Two things to decide before you turn one loose:

* **Publish, or leave a draft?** Publishing daily is the point for a topic queue you've already approved. If you'd rather see it first, end the prompt with "leave it as a draft, don't publish" — or connect a WordPress user without publish rights and it can't publish either way. See [**What your assistant can and can't do**](/ai-agents/safety-and-permissions).
* **Keep the cadence sane.** Every run spends your affiliate networks' API quota. Nothing needs to run hourly.

{% hint style="info" %}
**Your off switch:** revoking the application password stops every scheduled task using it, immediately.
{% endhint %}

### Prefer a permanent connection? (advanced)

The setup above asks for your credentials in each new conversation. If you'd rather set them once, Claude Desktop can connect over **MCP** (Model Context Protocol) instead. It's more work up front, and it buys you two things:

* Your application password lives in a config file on your own computer — it never goes into a conversation.
* You get a connector entry in Claude with per-tool permission controls.

You'll need the free **WordPress MCP Adapter** plugin and **Node.js** installed.

1. Download the latest release **`.zip`** from the [MCP Adapter releases page](https://github.com/WordPress/mcp-adapter/releases).
2. In WordPress, go to **Plugins → Add New Plugin → Upload Plugin**, choose the zip, **Install**, then **Activate**. Your **MCP endpoint** now appears on the AI Agents page.
3. In Claude Desktop, open **Settings → Developer → Edit Config** and add a `content-egg` server:

```json
{
  "mcpServers": {
    "content-egg": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "https://YOUR-SITE.com/wp-json/content-egg/mcp",
        "WP_API_USERNAME": "YOUR_WP_USERNAME",
        "WP_API_PASSWORD": "YOUR_APPLICATION_PASSWORD"
      }
    }
  }
}
```

4. Save and **restart Claude Desktop**. Under **Settings → Connectors** you'll see **content-egg** — click it to set tool permissions.

<figure><img src="/files/KWZyFZP8NoW9EREdNXoe" alt=""><figcaption><p>The content-egg connector in Claude Desktop — set tool permissions here</p></figcaption></figure>

{% hint style="success" %}
You don't have to type this by hand. Once the adapter is active, the **Claude** tab on the AI Agents page gains a **Permanent connection for Claude Desktop (MCP)** section with the whole block ready to copy, pre-filled with your endpoint and username — just drop in your application password. (It isn't there before you install the adapter.)
{% endhint %}

<figure><img src="/files/M1ajezhftuZ5zQJkBSuy" alt=""><figcaption><p>Adding the Content Egg MCP server to Claude Desktop</p></figcaption></figure>

Once connected this way, Claude can call the **`get-guide`** tool to fetch the guide through the MCP channel — no link to paste.

{% hint style="info" %}
MCP in the **browser** is a different story: claude.ai's **Add custom connector** dialog only offers OAuth sign-in, and the MCP Adapter authenticates with an application password. If the beta **Request headers** option appears in your account, you can add the endpoint with an `Authorization: Basic <token>` header — the AI Agents page builds that token for you. Otherwise use the REST setup at the top of this page, which works everywhere.
{% endhint %}

### If something goes wrong

* **"I can't reach that site" / connection errors** — the domain isn't allowed yet, or it's spelled differently than your site (`www.` matters). Recheck step 1.
* **401 errors even though the password is right** — some servers strip the login details before WordPress ever sees them. Ask your host to enable `Authorization` header pass-through; it's a one-line change they'll recognise.
* **Requests blocked or timing out** — a firewall or security plugin may be blocking Claude. Allow the requests, or ask your host to whitelist the REST API.
* **"Unauthorized"** — use the **application password**, not your normal login password, and confirm Agent Access is switched on.
* **It can search but can't build or edit** — building and editing require **Content Egg Pro**.
* **Claude sees no Content Egg tools (MCP setup)** — confirm the MCP Adapter plugin is active, the endpoint shows on your AI Agents page, and you restarted Claude Desktop.


# Connect any other assistant

Any AI assistant that can call a web API or speak MCP can run Content Egg — here's the generic setup.

ChatGPT and Claude are the easiest to set up, but Agent Access is a standard interface — **any** assistant or tool that can call a web API can drive Content Egg. There are two ways to connect, and your tool will support one or both.

**Before you start,** finish [**Turning on Agent Access**](/ai-agents/turning-on-agent-access) so you have your application password and your site's links.

{% hint style="success" %}
**The no-setup path.** Assistants that can act on your behalf — agent and coding tools like Claude Code, Cursor, or ChatGPT's agent mode — usually don't need any of the configuration below. Paste your **agent guide link** into the chat, give it your WordPress username and application password, and ask. It reads the guide and starts working. The two paths below are for making a permanent, reusable connection.
{% endhint %}

### Path 1 — Web API tools (OpenAPI)

If your tool can import an **OpenAPI** document and use **Basic authentication** — this covers Custom-GPT-style actions, many no-code automation tools, and code you write yourself — give it:

* Your **OpenAPI link** (`…/wp-json/content-egg/v1/openapi`)
* **Basic auth**: your WordPress **username** + **application password**

The tool reads the OpenAPI link to learn everything it can do; the application password lets it log in.

### Path 2 — MCP tools

If your tool speaks **MCP** — this covers Claude Desktop, Claude Code, Cursor, and other MCP clients — give it:

* Your **MCP endpoint** (`…/wp-json/content-egg/mcp`)
* Your WordPress **username** + **application password**

The MCP endpoint requires the free **WordPress MCP Adapter** plugin (see [**Connect Claude**](/ai-agents/connect-claude) for how to install it).

{% hint style="info" %}
**The one tip that helps every assistant:** hand it your **agent guide link** (`…/wp-json/content-egg/v1/agent-guide`). It's a short, plain-language playbook that tells the assistant what your site can do and which kind of block to use when. Most tools have an "instructions" or "system prompt" box — paste the link (or its contents) there.
{% endhint %}

### A few common tools

* **Claude** — no MCP needed. Allow your site's domain in Claude's settings, then give it your **agent guide link** plus your WordPress **username** and **application password**; it calls the REST API directly. **Claude Code** works the same way with nothing to allow. See [**Connect Claude**](/ai-agents/connect-claude). (The MCP endpoint remains an option if you'd rather store credentials in a local config file.)
* **Cursor** — as an agent tool it works the same no-setup way (guide link + credentials, direct REST). Or, for a permanent connection, point its MCP client at your **MCP endpoint** (requires the MCP Adapter).
* **Your own scripts** — call the REST API directly with the application password. The [**For advanced users**](/ai-agents/advanced) page has the technical details.

Whatever you connect, the rules are the same: it acts as the WordPress user you gave it, everything is logged, and your secrets stay hidden. See [**What your assistant can and can't do**](/ai-agents/safety-and-permissions).




---

[Next Page](/llms-full.txt/1)

