# Common Issues

## Connection issues

<details>

<summary>WordPress site is not connecting</summary>

The most common reasons a WordPress site fails to connect:

* **REST API is disabled** — some security plugins (like Wordfence or iThemes Security) have an option to disable the REST API for non-logged-in users. Check your security plugin settings and allow REST API access, or whitelist Coupler.io.
* **Wrong site URL** — make sure you're entering the root URL of your site (e.g., `https://yoursite.com`) and not a specific page URL.
* **Incorrect credentials** — double-check that you're using an **Application Password** (found under Users → Profile → Application Passwords in your WordPress admin), not your regular login password.
* **Site is on a local server or behind a VPN** — Coupler.io can only connect to publicly accessible URLs.

</details>

<details>

<summary>"Non-JSON response" error when connecting</summary>

This error usually means something is intercepting the API request before WordPress can respond — most commonly Cloudflare's bot protection or a WAF (web application firewall).

To fix this:

1. Log in to your Cloudflare dashboard and check your firewall rules for any rules that would block automated requests.
2. Temporarily disable "Bot Fight Mode" or "Under Attack Mode" and test the connection.
3. If you use a different security layer, look for rules blocking requests to `/wp-json/` endpoints and add an exception for Coupler.io.

{% hint style="warning" %}
Cloudflare and similar CDN services blocking the WordPress REST API (`/wp-json/`) is the most frequently reported connection error for WordPress in Coupler.io.
{% endhint %}

</details>

## Missing data

<details>

<summary>Only some posts are being imported — not all of them</summary>

The WordPress REST API paginates results, and by default Coupler.io fetches all pages. However, if your site has a very large number of posts, timeouts can interrupt the process.

* Check whether the missing posts have a specific status (draft, private, pending) — the API may only return published posts depending on your authentication level.
* Make sure your Application Password belongs to a user with sufficient permissions (Editor or Administrator) to read all post statuses.

</details>

<details>

<summary>The start date filter doesn't seem to work for Posts</summary>

The start date parameter applies only to **Pages, Comments, Media, and Editor blocks**. For Posts, Users, Categories, Tags, Taxonomies, Types, Themes, Statuses, and Settings, all records are always returned regardless of the date you set.

If you only want recent posts, filter by the `date` or `modified` column in your destination after the import.

</details>

<details>

<summary>New posts or pages aren't showing up after a refresh</summary>

If a scheduled or manual refresh isn't picking up new content, check:

* The data flow ran successfully (look for errors in the run log)
* Your destination sheet or table isn't being overwritten incorrectly — if you're using **Append** mode, duplicates may be hiding new rows
* The post status — newly created posts in "pending" or "draft" status may not be visible depending on the API user's role

</details>

## Permission errors

<details>

<summary>Getting a 401 or 403 error</summary>

A 401 error means authentication failed. Re-generate your Application Password from **Users → Profile → Application Passwords** and update it in Coupler.io.

A 403 error means the authenticated user doesn't have permission to access that resource. Switch to an Administrator-level Application Password to ensure full API access.

</details>

## Data discrepancies

<details>

<summary>Post content includes raw HTML instead of plain text</summary>

The `content` and `excerpt` fields return rendered HTML from the WordPress REST API. This is expected behavior. To work with clean text, use your destination's built-in functions to strip HTML tags (e.g., `REGEXREPLACE` in Google Sheets or a transformation step in BigQuery).

</details>

<details>

<summary>Categories and tags show as IDs, not names</summary>

The Posts entity returns category and tag IDs, not their display names. To resolve this, add the **Categories** and **Tags** entities as additional sources in your data flow and use the **Join** transformation to match IDs to names.

</details>
