# Scribd Document Search Scraper (`solidcode/scribd-scraper`) Actor

\[💰 $3.5 / 1K] Search Scribd by keyword and export structured metadata for every matching document — title, author, type, page count, ratings, views, language, categories, and direct reader and download links. One tidy row per document, many keywords per run.

- **URL**: https://apify.com/solidcode/scribd-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, Other
- **Features:** Limited permissions
- **Stats:** 32 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 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

## Scribd Document Search Scraper

Search Scribd by keyword and pull clean, structured metadata for every matching document — title, author, page count, view counts, ratings, language, categories, and direct reader and download links. Run many keywords in a single pass and get one tidy row per document. Built for market researchers, competitive analysts, and content and lead-gen teams who need Scribd document data at scale without paging through search results by hand.

### Why This Scraper?

- **Multi-keyword batch in one run** — pass a list of search terms and each keyword runs as its own search, so you cover an entire topic map in a single pass instead of one query at a time.
- **Up to 10,000 results per keyword** — lifts the typical 100-result search ceiling 100× so you can sweep a whole topic, not just the first page.
- **22 structured fields per document** — id, title, author, type, description, page count, release date, views, ratings, language, categories, and direct links — every row consumption-ready, no raw markup.
- **Vote counts on 100% of rows, star scores wherever the votes exist** — `ratingCount`, `upvoteCount`, and `downvoteCount` arrive as plain numbers on every single row, `0` included, so totals and averages never break. The derived 0–5 star score is computed from those votes, and because most Scribd uploads have never been voted on it fills on about a third of rows (629 of 1,905 across an 8-topic sample) and swings sharply by topic — 59% on service manuals, under 6% on accounting templates.
- **Author profile URLs for outreach** — the primary author's name lands on every row and their absolute Scribd profile link on roughly 97 rows in 100, alongside an `authors` array giving each contributor's id, name, and profile URL. The remainder are uploads by accounts that have no public profile page, so the name ships without a link rather than with a broken one.
- **Engagement signals built in** — real view counts, parsed from Scribd's "15K"/"1.2M" shorthand into plain integers you can sort and sum, so you can rank a topic by actual readership instead of search relevance.
- **Reader and download-page links on 100% of rows** — both absolute and ready to open: the canonical Scribd reader URL, plus a direct link that lands on Scribd's own download control for that exact document. Scribd asks you to be signed in before it hands over the file, so the link is the shortest route to it rather than the file itself. No path reconstruction, no ID guesswork.
- **Result-language preference across 21 languages** — bias results toward English, Spanish, Portuguese, French, German, Arabic, Hindi, Japanese, and more so you collect documents in the language your audience reads.
- **Query provenance on every row** — each document carries the exact keyword that surfaced it, so a single mixed dataset stays attributable per search term.

### Use Cases

**Market & Content Research**

- Map how much Scribd content exists around a topic, product, or industry
- Surface the most-viewed and highest-rated documents in a niche
- Track templates, whitepapers, and guides circulating in your space
- Build topic libraries spanning dozens of keywords in one run

**Competitive Analysis**

- See which authors and brands publish the most in your category
- Benchmark engagement (views, ratings) against competing documents
- Monitor new uploads tied to a brand or product name
- Compare document depth by page count across competitors

**Lead Generation & Outreach**

- Collect author profile URLs and names for creator outreach
- Identify prolific publishers in a target vertical
- Build prospect lists from documents matching buyer-intent keywords
- Prioritize outreach by author reach using view counts and ratings

**Academic & Reference**

- Gather reference document metadata across many search terms at once
- Filter your reading list by page count and publication date before opening anything
- Prefer results in a specific language for non-English literature reviews
- Catalog community ratings to triage which documents are worth reading

**Content Curation**

- Power recommendation feeds and resource roundups with fresh metadata
- Enrich an existing content database with views, ratings, and categories
- Curate by the category labels Scribd has filed a document under, where it has filed one
- Feed a newsletter or knowledge base with structured document records

### Getting Started

#### Simple — one keyword

```json
{
    "queries": ["business plan template"]
}
```

#### Several keywords, more results each

```json
{
    "queries": ["machine learning", "data science", "neural networks"],
    "maxResultsPerQuery": 250
}
```

#### Advanced — language preference and a deep sweep

```json
{
    "queries": ["recetas de cocina", "plan de negocios"],
    "maxResultsPerQuery": 1000,
    "language": "4"
}
```

### Input Reference

All fields are optional — run with just a keyword and sensible defaults handle the rest.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `queries` | string\[] | `["business plan template"]` | One or more keywords to search on Scribd. Each keyword runs its own search — add several to cover a whole topic in one run. |
| `maxResultsPerQuery` | integer | `100` | How many documents to return per keyword. Set to `0` to fetch every available match. Results arrive in pages of 40, so the final page may slightly overshoot rather than cut off mid-page. |
| `language` | select | `Any language` | Prefer results written in a chosen language — English, Spanish, Portuguese, French, German, Italian, Dutch, Russian, Japanese, Korean, Chinese, Arabic, Hindi, Indonesian, Turkish, Polish, Danish, Romanian, Thai, Swedish, or Czech. Leave on "Any language" for no preference. Coverage depends on how much content Scribd has in that language for your keyword. |

### Output

Each matching document becomes one flat row. Here's a representative result:

```json
{
    "id": "238702049",
    "title": "Sample Business Plan Template",
    "author": "Jane Author",
    "authorUrl": "https://www.scribd.com/users/12345678",
    "authors": [
        { "id": 12345678, "name": "Jane Author", "url": "https://www.scribd.com/users/12345678" }
    ],
    "type": "document",
    "description": "A complete business plan template covering executive summary, market analysis, and financials...",
    "url": "https://www.scribd.com/document/238702049/Sample-Business-Plan-Template",
    "downloadUrl": "https://www.scribd.com/document_downloads/238702049?extension=pdf",
    "imageUrl": "https://imgv2-1-f.scribdassets.com/img/document/238702049/original.jpg",
    "pageCount": 32,
    "releasedAt": "2018-04-12",
    "views": 15000,
    "isUnlocked": false,
    "rating": 4.5,
    "upvoteCount": 90,
    "downvoteCount": 10,
    "ratingCount": 100,
    "language": "English",
    "languageIso": "en",
    "categories": ["Business", "Templates"],
    "query": "business plan template"
}
```

#### Document Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Scribd document identifier |
| `title` | string | Document title |
| `type` | string | Document type label as classified by Scribd |
| `description` | string | Scribd's document description, when the upload has one (around 9 rows in 10) |
| `pageCount` | integer | Number of pages, filled on 100% of rows |
| `releasedAt` | string | Publication or upload date |
| `isUnlocked` | boolean | Scribd's own unlocked-for-this-viewer flag. Results are collected without a Scribd account, so it reads `false` on every row |
| `categories` | string\[] | Category labels Scribd files the document under, on roughly 4 rows in 10. Scribd categorises only part of its library, so this is an empty list on documents it has never filed |
| `query` | string | The search keyword that surfaced this row |

#### Author Fields

| Field | Type | Description |
|-------|------|-------------|
| `author` | string | Primary author name (may be null) |
| `authorUrl` | string | Primary author's Scribd profile URL, filled on roughly 97% of rows; null where the uploading account has no public profile page |
| `authors` | object\[] | All contributors, each with `id`, `name`, and profile `url`. Filled on about 98.5% of rows; empty on the older uploads Scribd no longer attributes to a profile |

#### Engagement & Ratings

| Field | Type | Description |
|-------|------|-------------|
| `views` | integer | View count, parsed to a plain integer |
| `rating` | number | Derived 0–5 star rating from community votes. Null on a document nobody has rated yet, which is the majority: 33% of rows carried a score across a 1,905-row sample, ranging from 6% to 59% depending on the topic |
| `upvoteCount` | integer | Number of upvotes (`0` when there are none) |
| `downvoteCount` | integer | Number of downvotes (`0` when there are none) |
| `ratingCount` | integer | Total ratings cast, on 100% of rows (`0` when there are none) |
| `language` | string | Language name |
| `languageIso` | string | ISO language code |

#### Links & Media

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Canonical Scribd reader URL. Scribd publishes non-English documents on its matching language site, so a Spanish document reads `es.scribd.com` and a Portuguese one `pt.scribd.com` |
| `downloadUrl` | string | Direct link to this document's download page on Scribd, on 100% of rows. It opens Scribd's own download control for that file; Scribd requires a signed-in account to complete the download, so this is the entry point rather than the file itself |
| `imageUrl` | string | Cover thumbnail image URL |

### Tips for Best Results

- **Use specific multi-word phrases** to narrow large topics — a broad single word like "business" returns tens of thousands of loosely related documents, while "small business marketing plan" returns a focused, usable set.
- **Batch related keywords in one run** — the `query` field tags every row with its source keyword, so you can split one mixed dataset back out per term afterward, and the numeric `id` stays the same wherever a document lives on Scribd, so `id` is the key to dedupe and join on when you merge runs.
- **Start with a small `maxResultsPerQuery`** (40–100) to confirm the results match your intent, then raise it once you're happy with the keywords.
- **Set `maxResultsPerQuery` to 0** only when you genuinely want the full match set — it sweeps deep and is best paired with tight, specific phrases.
- **Treat `language` as a preference, not a hard filter** — for keywords with little Scribd content in a given language, results fall back to the most available language; pair a language with a keyword written in that language for the best hit rate.
- **Rank by `views` first, then break ties with `rating`** — views land on 100% of rows while star scores exist on about a third, so views make the better primary sort and ratings the tie-breaker. `ratingCount` is on every row too, so use it to weigh how much a given star score is actually worth.
- **Use `pageCount` to pre-screen depth** before opening anything — filter out one-page stubs or zero in on long-form references in seconds, and pair it with `releasedAt` to drop dated material.

### Pricing

**From $3.50 per 1,000 results** — undercuts comparable Scribd search scrapers while lifting the result ceiling 100×. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.42 | $0.40 | $0.38 | $0.35 |
| 1,000 | $4.20 | $3.95 | $3.75 | $3.50 |
| 10,000 | $42.00 | $39.50 | $37.50 | $35.00 |
| 100,000 | $420.00 | $395.00 | $375.00 | $350.00 |

A "result" is any document row in the output dataset. The fixed per-run start fee and any platform usage (storage) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate research, market analysis, content curation, and lead generation. Users are responsible for complying with applicable laws and Scribd's Terms of Service. Only collect publicly available document metadata, respect copyright and authors' rights, and do not use extracted data for spam, harassment, or any unlawful purpose.

# Actor input Schema

## `queries` (type: `array`):

Keywords to search on Scribd (e.g., 'business plan template' or 'machine learning'). Each query produces its own set of results. Add several queries to run them all in one go.

## `maxResultsPerQuery` (type: `integer`):

How many documents to return for each search query. Set to 0 to collect all available results for the query (capped at 10,000 per keyword). Results are returned in pages of 40, so the final page may slightly overshoot this number rather than be cut off mid-page.

## `language` (type: `string`):

Prefer results in this language. Scribd biases results toward your choice, but coverage depends on how much content exists for each keyword, so some results may still appear in other languages. Choose 'Any language' for no preference.

## Actor input object example

```json
{
  "queries": [
    "business plan template"
  ],
  "maxResultsPerQuery": 100,
  "language": "any"
}
```

# Actor output Schema

## `documents` (type: `string`):

Table of document results with title, author, type, page count, rating, views, and links.

# 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 = {
    "queries": [
        "business plan template"
    ],
    "maxResultsPerQuery": 100,
    "language": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/scribd-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 = {
    "queries": ["business plan template"],
    "maxResultsPerQuery": 100,
    "language": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/scribd-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 '{
  "queries": [
    "business plan template"
  ],
  "maxResultsPerQuery": 100,
  "language": "any"
}' |
apify call solidcode/scribd-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/scribd-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/4CMqm4VVRYDaG2TuF/builds/LkM1PVyGC152800YZ/openapi.json
