# FTC Warning Letters (`bakos_bence/ftc-warning-letters`) Actor

Companies that received Federal Trade Commission warning letters: recipient organization, letter title, date when available, and letter URL. Entity recipients preferred; person-only letters filtered. Unofficial; not affiliated with the FTC.

- **URL**: https://apify.com/bakos\_bence/ftc-warning-letters.md
- **Developed by:** [Bakos Bence](https://apify.com/bakos_bence) (community)
- **Categories:** Business, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What is FTC Warning Letters?

Companies that received Federal Trade Commission warning letters: recipient organization, letter title, date when available, and letter URL. Entity recipients preferred; person-only letters filtered.

### What FTC Warning Letters returns

| Field | What it is | Example |
| --- | --- | --- |
| `recipient` | Recipient | Vtron Inc. d/b/a Vtron Lasers |
| `title` | Title | Vtron Inc. d/b/a Vtron Lasers |
| `date` | Date | 2026-07-06 |
| `letterUrl` | Letter Url | https://www.ftc.gov/legal-library/browse/warning-letters/vtron-inc-dba-vtron-lasers |
| `letterSlug` | Letter Slug | vtron-inc-dba-vtron-lasers |
| `sourceUrl` | Source Url | https://www.ftc.gov/legal-library/browse/warning-letters |
| `scrapedAt` | Scraped At | 2026-09-22T12:00:00+00:00 |

### How do I run FTC Warning Letters?

1. Click **Try for free**.
2. Fill **Maximum listing pages**.
3. Set **Maximum letters**.
4. Click **Start**.
5. Open the dataset and download it, or send it on with one of the integrations below.

A search can match more than one row. The run keeps the first matches, up to **Maximum letters**.

Saved runs on the **Tasks** tab:

- [FTC warning letters first listing page](https://console.apify.com/actors/tasks/bakos_bence/ftc-warning-letters-first-page)
- [FTC warning letters three listing pages](https://console.apify.com/actors/tasks/bakos_bence/ftc-warning-letters-three-pages)
- [FTC warning letters two listing pages](https://console.apify.com/actors/tasks/bakos_bence/ftc-warning-letters-two-pages)

### Input

The **Input** tab lists every field. The sample input is:

```json
{
    "maxItems": 5,
    "maxPages": 3
}
```

### Output

One row looks like this. `scrapedAt`, when present, is the time that run finished.

```json
{
  "recipient": "Vtron Inc. d/b/a Vtron Lasers",
  "title": "Vtron Inc. d/b/a Vtron Lasers",
  "letterUrl": "https://www.ftc.gov/legal-library/browse/warning-letters/vtron-inc-dba-vtron-lasers",
  "letterSlug": "vtron-inc-dba-vtron-lasers",
  "date": "2026-07-06",
  "sourceUrl": "https://www.ftc.gov/legal-library/browse/warning-letters",
  "scrapedAt": "2026-09-22T12:00:00+00:00"
}
```

### How much does FTC Warning Letters cost?

You pay for each row saved. Platform usage is included. Current rates are on the [Pricing](https://apify.com/bakos_bence/ftc-warning-letters/pricing) tab.

How pay-per-event billing works: [Actors in Store](https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event).

### Integrations

#### Excel

1. Click **Try for free**, run this Actor, and wait until the run finishes.
2. Open that run and go to its dataset.
3. Choose **Export**, then **Excel**.

To download the newest successful run later without opening the dataset:

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once.
4. Paste this into a browser. Replace `TASK_ID` and `YOUR_TOKEN`.

```text
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=xlsx&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
```

Anyone with that URL can read the rows. Treat the token like a password.

Dataset export formats: [Dataset items](https://docs.apify.com/api/v2/dataset-items-get).

#### Google Sheets

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once so there is a successful dataset.
4. In a Google Sheet, click cell **A1** and paste this formula. Replace `TASK_ID` and `YOUR_TOKEN`.

```text
=IMPORTDATA("https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN")
```

5. Wait until the columns fill. Sheets refreshes `IMPORTDATA` on its own. Use **Data → Data connectors → Refresh** when you want it now.

Anyone with that URL can read the rows. Treat the token like a password.

#### API, Python, and Node

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. Send this request. Replace `YOUR_TOKEN`.

```bash
curl -X POST "https://api.apify.com/v2/acts/bakos_bence~ftc-warning-letters/runs?token=YOUR_TOKEN&waitForFinish=120" \
  -H "Content-Type: application/json" \
  -d '{"maxItems":5,"maxPages":3}'
```

3. From the response, copy `defaultDatasetId`.
4. Fetch the rows:

```text
https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=YOUR_TOKEN
```

The **API** tab on this page has the same call in JavaScript, Python, and the CLI. Client docs: [JavaScript](https://docs.apify.com/api/client/js), [Python](https://docs.apify.com/api/client/python/docs/quick-start), [Run an Actor](https://docs.apify.com/api/v2/act-runs-post).

#### Zapier

1. In Apify Console, open **Settings → API & Integrations** and copy an API token. You will only need it if the connection asks for a token. The usual path is the access prompt below.
2. In Zapier, create a Zap. For the action, search **Apify** and choose **Run Actor**.
3. Connect your Apify account and choose **Allow Access**.
4. Select **FTC Warning Letters**.
5. Paste this input:

```json
{
    "maxItems": 5,
    "maxPages": 3
}
```

6. Use a synchronous run only when the run will finish within 30 seconds. Otherwise leave it asynchronous, then add **Fetch dataset items**, or start the Zap with the **Finished Actor run** trigger.
7. Test the step. Add the next action, such as Google Sheets, Slack, or email. Publish the Zap.

Triggers and the other actions: [Zapier integration](https://docs.apify.com/integrations/zapier).

#### Make

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. In a Make scenario, add a module and search **Apify**.
3. Create the connection with OAuth, or paste the API token.
4. Choose **Run an Actor**. Select **FTC Warning Letters**. Set **Run synchronously** to **Yes**.
5. Paste this input:

```json
{
    "maxItems": 5,
    "maxPages": 3
}
```

6. Add **Get Dataset Items**. Set the dataset ID to the default dataset ID from the Run an Actor module.
7. Add the module that should receive the rows, such as Google Sheets **Bulk add rows**, and map the fields.

If the run can take longer than your Make plan lets a synchronous module wait, start with **Watch Actor Runs** instead, then add **Get Dataset Items**. Details: [Make integration](https://docs.apify.com/integrations/make).

#### n8n

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On n8n Cloud, open the nodes panel, search **Apify**, and install the node. On a self-hosted n8n, go to **Settings → Community Nodes → Install** and enter `@apify/n8n-nodes-apify`.
3. Create a credential. Search **Apify API**, paste the token, and save. On n8n Cloud you can use **Apify OAuth2** instead.
4. Add an Apify node. Choose **Run Actor**. Pick **FTC Warning Letters**. Turn on **Wait for finish**.
5. Set the input to:

```json
{
    "maxItems": 5,
    "maxPages": 3
}
```

6. Add another Apify node, **Get Dataset Items**. Set the dataset ID to the `defaultDatasetId` from the Run Actor node.
7. Add the next node, such as Google Sheets, and map the fields.

Full setup, triggers, and the AI-tool node: [n8n integration](https://docs.apify.com/integrations/n8n).

#### Power BI

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once.
4. Open Power BI Desktop → **Home** → **Get data** → **Web**.
5. Paste this URL. Replace `TASK_ID` and `YOUR_TOKEN`.

```text
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
```

6. When asked how to sign in, choose **Anonymous** → **Connect**.
7. Check that the preview is a table, then **Load**.
8. After you publish, schedule refresh against that same URL.

A `401` means the token is missing or you did not choose **Anonymous**. Anyone with the URL can read the rows.

#### Looker Studio

Looker Studio does not open a private CSV URL on its own. Put the rows in a Google Sheet first.

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once.
4. In a Google Sheet, click cell **A1** and paste this formula. Replace `TASK_ID` and `YOUR_TOKEN`.

```text
=IMPORTDATA("https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN")
```

5. Wait until the columns fill.
6. In Looker Studio, choose **Create → Report → Google Sheets** and pick that spreadsheet.
7. After the next run, refresh the Sheet, then refresh the Looker data source.

For a single snapshot, open the finished run, export **CSV** from the dataset, and use **File upload** in Looker Studio.

#### Tableau

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once.
4. In Tableau Desktop **2023.3+**, install the **REST API** connector from Tableau Exchange.
5. Choose **Connect → To a Server → REST API**.
6. Paste this URL. Replace `TASK_ID` and `YOUR_TOKEN`. Set the response format to **CSV**.

```text
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
```

7. Leave credentials empty. The token is already in the URL.
8. Create an extract. Refresh it after the next run.

For a single snapshot, open the finished run, export **CSV** from the dataset, and connect Tableau to that file.

#### Qlik

1. In Apify Console, open **Settings → API & Integrations** and copy an API token.
2. On this Actor, open the **Tasks** tab, open the task you want, and copy the task ID from the URL.
3. Run that task once.
4. In Qlik Cloud or Qlik Sense, choose **Add data → REST**.
5. Set the method to **GET** and paste this URL. Replace `TASK_ID` and `YOUR_TOKEN`.

```text
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
```

6. Set the response type to **CSV**.
7. Test the connection, pick the table, and load.
8. Reload the app after the next run.

For a single snapshot, open the finished run, export **CSV** from the dataset, and add that file in Qlik.

#### Webhooks

1. In Apify Console, open this Actor and go to **Integrations**.
2. Add a webhook for **Actor run succeeded**.
3. Set the URL of the service that should receive the run.
4. When a run finishes, the payload includes `defaultDatasetId`. Read the rows with this URL. Replace `DATASET_ID` and `YOUR_TOKEN`. The token is under **Settings → API & Integrations**.

```text
https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=YOUR_TOKEN
```

Event types and the payload: [Webhooks](https://docs.apify.com/integrations/webhooks).

#### AI tools

1. Open the **API** tab on this Actor.
2. Copy the MCP config shown there.
3. Paste it into the MCP client (Claude, Cursor, or another client that accepts that config).
4. Sign in when the client asks. It can then run this Actor.

Setup for each client: [Apify MCP server](https://docs.apify.com/integrations/mcp).

Airtable, Google Drive, Slack, and Snowflake are listed in [Integrations](https://docs.apify.com/platform/integrations).

### FAQ

#### Can I schedule this?

Yes. Save a Task from the input you want, then add a schedule in Console. After each successful run, this URL returns that task’s newest dataset. Replace `TASK_ID` and `YOUR_TOKEN` (the token is under **Settings → API & Integrations**).

```text
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=json&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
```

This Actor is not affiliated with the FTC.

# Actor input Schema

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

Cap warning-letter rows returned. Leave at <b>5</b> for a cheap first run.

## `maxPages` (type: `integer`):

How many warning-letter listing pages to walk (?page=0,1,…). Default <b>3</b>. Raise only when you need a deeper crawl.

## Actor input object example

```json
{
  "maxItems": 5,
  "maxPages": 3
}
```

# Actor output Schema

## `overview` (type: `string`):

Default dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 5,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("bakos_bence/ftc-warning-letters").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 5,
    "maxPages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("bakos_bence/ftc-warning-letters").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 5,
  "maxPages": 3
}' |
apify call bakos_bence/ftc-warning-letters --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uRjTGeHbp3DJDLow9/builds/fpNQI8BwZdl7cAw6v/openapi.json
