# X Profile & Post Monitor - Twitter Account Changes (`groupoject/x-profile-post-monitor`) Actor

Monitor public X/Twitter profiles for new posts and account changes. Track bios, names, avatars, websites, followers, posts, engagement, and media without login or an API key.

- **URL**: https://apify.com/groupoject/x-profile-post-monitor.md
- **Developed by:** [Group Oject](https://apify.com/groupoject) (community)
- **Categories:** Social media, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## X Profile & Post Monitor - Twitter Account Changes

Monitor public X/Twitter accounts for new posts and meaningful profile changes without login credentials or an API key. Collect current profile snapshots, recent posts, engagement metrics, media links, and change events in one clean dataset.

### What this Actor does

- Extracts public X profile names, bios, locations, websites, avatars, and banners
- Tracks followers, following, post counts, and verification status
- Collects recent visible posts with likes, reposts, replies, bookmarks, views, and media
- Emits only new posts on recurring monitoring runs
- Detects profile changes such as a new bio, display name, website, avatar, or banner
- Filters posts by age, keywords, replies, and reposts
- Runs over HTTP with no browser, X login, or API key

### Quick start

```json
{
  "handles": ["OpenAI", "Apify", "vercel"],
  "maxPostsPerProfile": 10,
  "publishedWithinDays": 30
}
````

### Monitor only changes and new posts

Enable `monitorChangesOnly` and choose a stable `stateKey`. The first run returns the current profile and visible posts. Later runs return only new posts and profile-change records.

```json
{
  "handles": ["OpenAI", "AnthropicAI", "GoogleDeepMind"],
  "monitorChangesOnly": true,
  "stateKey": "ai-company-x-monitor",
  "maxPostsPerProfile": 20,
  "includeReplies": false,
  "includeReposts": false
}
```

Use a different state key for each independent scheduled monitor. Connect an Apify webhook to Slack, email, Make, Zapier, Google Sheets, or your own API to receive changes automatically.

### Filter posts by topic

```json
{
  "handles": ["OpenAI", "GoogleDeepMind", "MicrosoftAI"],
  "includeKeywords": ["model", "API", "launch", "research"],
  "excludeKeywords": ["hiring"],
  "publishedWithinDays": 14
}
```

### Output record types

- `profile` — current public profile snapshot
- `profileChange` — current snapshot plus `changedFields` and previous values
- `post` — recent or newly detected public post with engagement and media fields

### Input fields

| Field | Description |
| --- | --- |
| `handles` | X handles or profile URLs. |
| `handlesText` | Bulk profile list, one per line. |
| `maxPostsPerProfile` | Recent visible posts kept per profile. |
| `publishedWithinDays` | Maximum post age; `0` disables filtering. |
| `includeReplies` | Include visible replies. |
| `includeReposts` | Include visible reposts. |
| `includeKeywords` | Keep posts matching at least one term. |
| `excludeKeywords` | Remove posts matching any term. |
| `monitorChangesOnly` | On later runs, output only new posts and profile changes. |
| `stateKey` | Stable identifier for persistent monitor state. |
| `maxProfiles` | Safety limit, up to 1,000 profiles. |
| `proxyConfiguration` | Optional proxy settings for larger repeated runs. |

### Suggested uses

- Competitor and executive account monitoring
- Brand and communications alerts
- Influencer watchlists
- Journalist and newsroom source tracking
- Product-launch monitoring
- Public profile compliance and change history
- Social content pipelines

### Limits

X controls which public timeline posts appear in its logged-out profile pages, so this Actor returns the recent posts visible there rather than a complete historical archive. Private, suspended, age-restricted, and login-only accounts are not supported. X may change its public page format; extraction errors are reported per profile without discarding successful profiles.

Use public data responsibly and follow X's terms and applicable privacy laws.

# Actor input Schema

## `handles` (type: `array`):

Public profile handles or x.com/twitter.com profile URLs.

## `handlesText` (type: `string`):

Paste one handle or profile URL per line.

## `maxPostsPerProfile` (type: `integer`):

Maximum recent visible posts kept for each profile.

## `publishedWithinDays` (type: `integer`):

Keep posts from this many days. Set 0 to disable the date filter.

## `includeReplies` (type: `boolean`):

Include visible posts that reply to another post.

## `includeReposts` (type: `boolean`):

Include reposts when X exposes them in the public timeline.

## `includeKeywords` (type: `array`):

Optional. Keep posts containing at least one keyword.

## `excludeKeywords` (type: `array`):

Optional. Remove posts containing any keyword.

## `monitorChangesOnly` (type: `boolean`):

Remember previous snapshots. The first run returns current data; later runs emit only new posts and changed profile fields.

## `stateKey` (type: `string`):

Stable unique key for this scheduled monitor.

## `maxProfiles` (type: `integer`):

Safety limit for profiles processed in one run.

## `requestDelayMs` (type: `integer`):

Delay between X profile requests.

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

Parallel profile requests. Keep modest for X.

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

Optional. Recommended for larger or frequent monitoring runs.

## `debugMode` (type: `boolean`):

Show detailed extraction logs.

## Actor input object example

```json
{
  "handles": [
    "OpenAI",
    "Apify",
    "vercel"
  ],
  "maxPostsPerProfile": 10,
  "publishedWithinDays": 30,
  "includeReplies": false,
  "includeReposts": false,
  "monitorChangesOnly": false,
  "stateKey": "default",
  "maxProfiles": 100,
  "requestDelayMs": 750,
  "maxConcurrency": 2,
  "debugMode": false
}
```

# Actor output Schema

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

Structured records from every monitored X account.

## `summary` (type: `string`):

Profile totals, new posts, detected changes, and failures.

## `errors` (type: `string`):

Profiles that could not be fetched or parsed.

# 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 = {
    "handles": [
        "OpenAI",
        "Apify",
        "vercel"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("groupoject/x-profile-post-monitor").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 = { "handles": [
        "OpenAI",
        "Apify",
        "vercel",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("groupoject/x-profile-post-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "handles": [
    "OpenAI",
    "Apify",
    "vercel"
  ]
}' |
apify call groupoject/x-profile-post-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=groupoject/x-profile-post-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "X Profile & Post Monitor - Twitter Account Changes",
        "description": "Monitor public X/Twitter profiles for new posts and account changes. Track bios, names, avatars, websites, followers, posts, engagement, and media without login or an API key.",
        "version": "1.0",
        "x-build-id": "JQprVKyACUzqIg8mc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/groupoject~x-profile-post-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-groupoject-x-profile-post-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/groupoject~x-profile-post-monitor/runs": {
            "post": {
                "operationId": "runs-sync-groupoject-x-profile-post-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/groupoject~x-profile-post-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-groupoject-x-profile-post-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "handles": {
                        "title": "X/Twitter profiles",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Public profile handles or x.com/twitter.com profile URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "handlesText": {
                        "title": "Bulk profile list",
                        "type": "string",
                        "description": "Paste one handle or profile URL per line."
                    },
                    "maxPostsPerProfile": {
                        "title": "Max posts per profile",
                        "minimum": 0,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum recent visible posts kept for each profile.",
                        "default": 10
                    },
                    "publishedWithinDays": {
                        "title": "Posts published within (days)",
                        "minimum": 0,
                        "maximum": 3650,
                        "type": "integer",
                        "description": "Keep posts from this many days. Set 0 to disable the date filter.",
                        "default": 30
                    },
                    "includeReplies": {
                        "title": "Include replies",
                        "type": "boolean",
                        "description": "Include visible posts that reply to another post.",
                        "default": false
                    },
                    "includeReposts": {
                        "title": "Include reposts",
                        "type": "boolean",
                        "description": "Include reposts when X exposes them in the public timeline.",
                        "default": false
                    },
                    "includeKeywords": {
                        "title": "Include post keywords",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Optional. Keep posts containing at least one keyword.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeKeywords": {
                        "title": "Exclude post keywords",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Optional. Remove posts containing any keyword.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "monitorChangesOnly": {
                        "title": "Only output new posts and profile changes",
                        "type": "boolean",
                        "description": "Remember previous snapshots. The first run returns current data; later runs emit only new posts and changed profile fields.",
                        "default": false
                    },
                    "stateKey": {
                        "title": "Monitor state key",
                        "type": "string",
                        "description": "Stable unique key for this scheduled monitor.",
                        "default": "default"
                    },
                    "maxProfiles": {
                        "title": "Max profiles",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Safety limit for profiles processed in one run.",
                        "default": 100
                    },
                    "requestDelayMs": {
                        "title": "Request delay (ms)",
                        "minimum": 0,
                        "maximum": 15000,
                        "type": "integer",
                        "description": "Delay between X profile requests.",
                        "default": 750
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Parallel profile requests. Keep modest for X.",
                        "default": 2
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Recommended for larger or frequent monitoring runs."
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Show detailed extraction logs.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
