# Wikimedia Commons Admin Logs Scraper (`parseforge/wikimedia-commons-admin-logs-scraper`) Actor

Scrapes Wikimedia Commons admin log events by deletion, block, or user rights type. Returns each event as a flat row with admin username, action, target, timestamp, and comment. Export to CSV, JSON, Excel, or XML.

- **URL**: https://apify.com/parseforge/wikimedia-commons-admin-logs-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.62 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Wikimedia Commons Admin Logs Scraper

**Scrape Wikimedia Commons admin logs by deletion, block, or user rights action, up to a million events per run.** Each row returns the admin username, target page or user, timestamp, and log comment. No login, no API key, no rate-limit headaches. Export to CSV, JSON, Excel, or XML.

Wikimedia Commons admin logs record every deletion, block, and user rights change made by administrators, but the raw API returns paginated JSON that is tedious to page through and clean. This Actor queries the public logevents endpoint directly, flattens each event into one row, and stops when you have the number of records you asked for. It is the fastest way to get a clean dataset of Commons moderation activity without writing your own API client.

| Who uses it | What they scrape Wikimedia Commons for |
|---|---|
| Wikimedia researchers | Studying deletion patterns and admin workload on Commons over time |
| Community moderators | Auditing blocks and user rights changes for transparency reports |
| Open knowledge analysts | Tracking which files and pages get deleted and why |
| Data journalists | Building timelines of admin actions around controversial content |
| GLAM institutions | Monitoring deletion logs for their contributed media collections |

### What it does

This Actor collects Wikimedia Commons admin log events by log type and returns each event as one flat row with the admin username, action, target, timestamp, and comment.

- 🗑️ **Deletion log:** every file and page removal, with the deleting admin and the stated reason.
- 🚫 **Block log:** every account or IP block, unblock, and reblock, with duration and comment.
- 👤 **User rights log:** every grant or removal of admin, bureaucrat, or other rights.
- 📦 **Flat rows:** one event per row, no nested JSON, ready for spreadsheets and databases.
- 🔁 **Pagination handled:** the Actor follows the API continuation token until maxItems is reached.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Wikimedia Commons data

**📉 Track deletion trends.**

A Wikimedia researcher runs the deletion log weekly and charts which file types and uploaders get removed most often.

**🔍 Audit admin accountability.**

A community moderator pulls the block log for a month and cross-references each block with its stated reason.

**🗂️ Monitor GLAM collections.**

A museum checks the deletion log for their contributed images and flags removals for follow-up.

**📰 Build moderation timelines.**

A data journalist collects user rights changes around a controversial event and reconstructs who had which permissions when.

**🧪 Study admin workload.**

A researcher compares deletion and block volumes across years to measure moderator burnout and activity cycles.

### Why choose this scraper

| | What you get |
|---|---|
| **No API key** | The Commons logevents endpoint is public, so you can start a run immediately |
| **Clean flat schema** | Every event is one row with admin, action, target, timestamp, and comment |
| **Three log types** | Deletion, block, and user rights logs in one Actor |
| **Pagination built in** | You set maxItems and the Actor handles continuation tokens |
| **Export anywhere** | CSV, JSON, Excel, and XML outputs fit any downstream workflow |

### What a Wikimedia Commons record looks like

Every record returns as one flat JSON row. Here is a real one from a run:

```json
{
 "logid": 406717557,
 "title": "File:Foto de Teuzinho.h.jpg",
 "user": "Lymantria",
 "action": "delete",
 "type": "delete",
 "timestamp": "2026-09-04T05:33:36Z",
 "comment": "[[COM:WEBHOST|Personal file]] by non-contributors ([[COM:CSD#F10|F10]])",
 "ns": 6,
 "pageid": 0,
 "logpage": 198823543,
 "scrapedAt": "2026-09-04T05:33:41.597Z"
}
```

Every value above comes from a real run. A field a record does not have comes back as `null`.

### Configure the run

Pick one log type, deletion, block, or user rights, and set the maximum number of events to return. The Actor pages through the API automatically and stops at your limit. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10,
 "logType": "delete"
}
```

A larger pull:

```json
{
 "maxItems": 200,
 "logType": "delete"
}
```

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Wikimedia Commons Admin Logs Scraper](https://apify.com/parseforge/wikimedia-commons-admin-logs-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Wikimedia Commons through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/wikimedia-commons-admin-logs-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that you selected a log type that has recent events. The deletion log is usually the busiest. Also confirm maxItems is at least 1.

**Why did my run stop before reaching maxItems?**

The API only returns events that exist. If Commons has fewer events of that type than your maxItems, the Actor returns everything available and stops.

**Can I get more than 10 items on the free plan?**

No. The free plan is limited to 10 items as a preview. Upgrade to a paid plan to set maxItems up to 1,000,000.

**Why are some comments empty?**

Some admin actions, especially older ones, have no comment attached. The comment field will be empty in those rows.

**How do I get all three log types at once?**

Run the Actor three times, once per log type, and merge the datasets. Each run returns one type by design.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Wikimedia account or API key? | No. The logevents endpoint is public and requires no authentication. You can run the Actor immediately. |
| What log types can I scrape? | Deletion, block, and user rights logs. Each run picks one type, so run the Actor three times if you need all three. |
| What fields does each row contain? | Each row includes the log ID, namespace, target title, page ID, log type, action, admin username, timestamp, and comment. |
| How many events can I get in one run? | Free users get up to 10 items as a preview. Paid users can set maxItems up to 1,000,000. |
| Does the Actor handle pagination? | Yes. It follows the API continuation token automatically and stops when it reaches your maxItems limit. |
| Can I filter by admin username or date range? | Not in this version. The Actor filters by log type only. You can filter the exported dataset by username or timestamp afterward. |
| What export formats are supported? | CSV, JSON, Excel, and XML. Pick the format that fits your analysis tool. |
| Is this the same data as the Special:Log page on Commons? | Yes. The Actor reads the same underlying logevents data that powers Special:Log, but returns it as clean structured rows. |
| How fresh is the data? | The Actor queries the live API on each run, so you get the current state of the logs at run time. |
| Can I schedule this to run daily? | Yes. Use Apify schedules to run the Actor on a recurring basis and build a rolling archive of admin actions. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

### Pricing

This Actor uses **pay-per-result** pricing: **$0.004 per result** collected. You are billed only for the results you receive, so a run that returns nothing costs nothing.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Wikimedia Foundation, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `logType` (type: `string`):

Type of admin log events to retrieve.

## Actor input object example

```json
{
  "maxItems": 10,
  "logType": "delete"
}
```

# Actor output Schema

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

Complete dataset of all scraped records.

# 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": 10,
    "logType": "delete"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/wikimedia-commons-admin-logs-scraper").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": 10,
    "logType": "delete",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/wikimedia-commons-admin-logs-scraper").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": 10,
  "logType": "delete"
}' |
apify call parseforge/wikimedia-commons-admin-logs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/wikimedia-commons-admin-logs-scraper"
        }
    }
}

```

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/BiWjYpKCAENadoFmD/builds/cphjc37cN6kD6Yw6d/openapi.json
