# Quora Posts Scraper · Profiles & Post Search \[No Login] (`memo23/quora-posts-scraper`) Actor

\[Only $0.50/1K] Scrape every post a Quora profile has published, past the ~30 Quora shows logged out, plus Quora post search by keyword. No login, no cookies. Full text, title, upvotes, views, shares, comments, date, Space, author and shared answer. Export JSON, CSV or Excel.

- **URL**: https://apify.com/memo23/quora-posts-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 posts

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/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

## Quora Posts Scraper

**Every post a Quora profile has ever published, plus Quora post search by keyword, with no login and no cookies.**

Paste a profile link or a search term and get one clean row per post: full text, title, upvotes, views, shares, comment count, date, the Space it was posted in, and the answer or link it shares. $0.50 per 1,000 posts.

### Why Use This Scraper?

- **Full post history, not the first page.** Logged out, Quora stops a profile's post list at about 30 posts. This actor reads on to the end: 212 of 212 on Adam D'Angelo's profile, 256 on Dushka Zapata's.
- **Post search with no account.** Quora only serves post search to signed-in visitors. Here it works with a search term and nothing else.
- **No cookies to export.** Other Quora post scrapers ask you to copy session cookies out of your browser and paste them in. You don't need to.
- **Engagement on every row.** Upvotes, views, shares and comments come from Quora's own data, not estimates.
- **Link shares resolved.** When a post shares a Quora answer or a web page, the row carries that answer's URL, title and image in `sharedContent`.
- **Pay per post.** You are charged for the posts you get, not for time or pages.

### Overview

This actor is for anyone who tracks what people and brands publish on Quora: marketers watching a competitor's founder, researchers building a dataset of posts on a topic, agencies reporting on a client's Quora presence, and AI teams collecting long-form text.

It covers Quora **posts**: the short-form and long-form content people publish on their profile and in Spaces. It does not return answers to questions or question pages; the [Quora Scraper](https://apify.com/memo23/quora-scraper) does those.

Every row is one post, whether it came from a profile or a search. The shape is identical, so profile runs and search runs can go into the same table.

### Supported Inputs

#### URL types

| Input | Example | What you get |
|---|---|---|
| Profile link (any tab) | `https://www.quora.com/profile/Adam-DAngelo` | That profile's posts, newest first |
| Profile posts tab | `https://www.quora.com/profile/Adam-DAngelo/posts` | Same as above |
| Post search link | `https://www.quora.com/search?q=remote%20work&type=post` | Posts matching the search |
| Post search link with time filter | `https://www.quora.com/search?q=startup%20advice&type=post&time=month` | Matching posts from the past month |
| Profile name | `Adam-DAngelo` (in `usernames`) | Same as the profile link |
| Search term | `remote work` (in `searchQueries`) | Same as the search link |

#### Copy-pasteable startUrls

```json
{
    "startUrls": [
        "https://www.quora.com/profile/Adam-DAngelo",
        "https://www.quora.com/search?q=remote%20work&type=post"
    ]
}
```

#### Keyword / search mode

Put plain keywords in `searchQueries` and pick a period in `searchTime` (any time, past hour, day, week, month or year). Each term is searched separately and returns up to `maxPostsPerSource` posts.

#### Unsupported inputs

- Question pages and answer links (use the [Quora Scraper](https://apify.com/memo23/quora-scraper))
- Space pages (`*.quora.com` Space home pages)
- Topic pages
- Private messages, drafts and any content only the account owner can see

Links the actor can't read are skipped with a note in the run log; the rest of the run continues.

### Use Cases

| Who | What they do with it |
|---|---|
| Marketing teams | Track every post a competitor's founder or brand account publishes, with reach (views, upvotes) |
| PR and comms | Monitor posts that mention a product or category by keyword |
| Researchers | Build topic datasets of Quora posts with dates and engagement |
| Agencies | Report a client's Quora output and which posts performed |
| AI and NLP teams | Collect long-form, human-written text with metadata for training and evaluation |
| Creators | Study what top Quora writers post and what gets views |

### How It Works

![How the Quora Posts Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-quora-posts.png)

1. **Add sources.** Paste profile links, profile names, search terms, or search links.
2. **Profiles are read to the end.** The actor opens each profile and pages through its posts, past the point where Quora stops showing posts to logged-out visitors.
3. **Searches run as post searches.** Each term returns matching posts, filtered to the period you chose.
4. **Each post becomes one row.** Text, title, counts, dates, Space, author and shared content are mapped into a flat, consistent shape.
5. **Export.** Download as JSON, CSV, Excel or HTML, or read the dataset from the Apify API.

### Input Configuration

#### Input fields

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array of strings | prefilled example | Quora profile links (any tab) or post-search links |
| `usernames` | array of strings | empty | Profile names: the part after `/profile/`, e.g. `Adam-DAngelo` |
| `searchQueries` | array of strings | empty | Keywords to search Quora posts for |
| `searchTime` | string | `all_times` | Period for search terms: `all_times`, `hour`, `day`, `week`, `month`, `year`. A search link's own `time=` wins |
| `maxPostsPerSource` | integer | `100` | Most posts per profile or search term. `0` = the full history |
| `maxItems` | integer | `1000` | Most posts for the whole run |
| `cookies` | string | empty | Optional. Your own Quora cookies, only if you want the run to use your account |
| `proxy` | object | empty | Optional. Your own proxy; leave empty to use the built-in residential proxy |

You need at least one of `startUrls`, `usernames` or `searchQueries`.

#### Common scenarios

**A profile's full post history**

```json
{
    "usernames": ["Adam-DAngelo"],
    "maxPostsPerSource": 0
}
```

**Recent posts on a topic**

```json
{
    "searchQueries": ["remote work", "startup advice"],
    "searchTime": "month",
    "maxPostsPerSource": 50
}
```

**Several profiles, latest 20 posts each**

```json
{
    "startUrls": [
        "https://www.quora.com/profile/Adam-DAngelo",
        "https://www.quora.com/profile/Dushka-Zapata"
    ],
    "maxPostsPerSource": 20
}
```

### Output Overview

One dataset row per post. Each row has:

- **The post:** `postId`, `url`, `title`, `text`, `images`, `links`
- **Engagement:** `upvotes`, `views`, `shares`, `comments`
- **Timing:** `createdAt`, `updatedAt` (ISO 8601, UTC)
- **Where it lives:** `space` (the Space the post was published in, if any)
- **What it shares:** `sharedContent` (the Quora answer, question or web page a link-share post points to)
- **Who wrote it:** `author` (uid, name, profile link, credential, followers)
- **Where the row came from:** `source` (`profile` or `search`), `profile`, `searchQuery`, `scrapedAt`

Fields Quora does not have for a post are `null` (for example `title` on a post without a heading, or `space` on a post made directly on a profile).

### Output Samples

#### Profile start: a post sharing an answer

```json
{
    "postId": 250172679,
    "url": "https://www.quora.com/profile/Dushka-Zapata/A-melon-https-www-quora-com-If-you-had-to-choose-one-emotion-to-feel-for-the-rest-of-your-life-aside-from-happiness",
    "title": null,
    "text": "A melon!",
    "images": [],
    "links": ["https://www.quora.com/If-you-had-to-choose-one-emotion-to-feel-for-the-rest-of-your-life-aside-from-happiness-what-would-it-be/answer/Dushka-Zapata"],
    "upvotes": 31,
    "views": 1212,
    "shares": 3,
    "comments": 2,
    "createdAt": "2026-06-10T16:28:14.637Z",
    "updatedAt": null,
    "accessOption": "free",
    "isPinned": false,
    "space": null,
    "sharedContent": {
        "type": "answer",
        "url": "https://www.quora.com/If-you-had-to-choose-one-emotion-to-feel-for-the-rest-of-your-life-aside-from-happiness-what-would-it-be/answer/Dushka-Zapata",
        "title": "If you had to choose one emotion to feel for the rest of your life, aside from happiness, what would it be?",
        "snippet": null,
        "imageUrl": "https://qph.cf2.quoracdn.net/main-qimg-1b9d61cd0eb1971442c64a05b07102dd-lq"
    },
    "author": {
        "uid": 85940989,
        "name": "Dushka Zapata",
        "profileUrl": "https://www.quora.com/profile/Dushka-Zapata",
        "credential": "Amateur Writer.",
        "followers": 300269
    },
    "source": "profile",
    "profile": "Dushka-Zapata",
    "searchQuery": null,
    "scrapedAt": "2026-10-18T16:29:18.651Z"
}
```

#### Search start: a text post with an image (text shortened)

```json
{
    "postId": 256468919,
    "url": "https://www.quora.com/profile/Rishika-1246/Need-genuine-advice-from-seniors-HRs-Im-an-MBA-graduate-currently-seeking-jobs-I-am-getting-interview-calls-from-S",
    "title": null,
    "text": "Need genuine advice from seniors & HRs.\nI'm an MBA graduate currently seeking jobs. I am getting interview calls from Startups.\nI'm confused — Should I join a Startup now or should I wait for MNC opportunities?…",
    "images": ["https://qph.cf2.quoracdn.net/main-qimg-3eaa91d62780422e1228376b393c0695"],
    "links": [],
    "upvotes": 1,
    "views": 59,
    "shares": 0,
    "comments": 4,
    "createdAt": "2026-09-28T09:36:33.372Z",
    "space": null,
    "sharedContent": null,
    "author": { "uid": 3235579920, "name": "Rishika", "profileUrl": "https://www.quora.com/profile/Rishika-1246", "credential": null, "followers": 0 },
    "source": "search",
    "searchQuery": "startup advice"
}
```

### Key Output Fields

#### Post content

| Field | Meaning |
|---|---|
| `postId` | Quora's numeric post ID; stable, good for deduplication |
| `url` | Link to the post (Space posts live on the Space's subdomain) |
| `title` | The post's heading, when it has one |
| `text` | Full post text, paragraphs separated by line breaks |
| `images` | Image URLs inside the post |
| `links` | Every link in the post, including shared answers |

#### Engagement

| Field | Meaning |
|---|---|
| `upvotes` | Upvote count |
| `views` | View count |
| `shares` | Share count |
| `comments` | Comment count |

#### Timing and status

| Field | Meaning |
|---|---|
| `createdAt` | When the post was published (UTC) |
| `updatedAt` | When it was last edited, if ever |
| `accessOption` | `free`, or a paid-Space access level |
| `isPinned` | Pinned in its Space |

#### Context

| Field | Meaning |
|---|---|
| `space` | `id`, `name`, `url`, `followers` of the Space the post is in |
| `sharedContent` | `type` (`answer`, `question`, `quora`, `link`), `url`, `title`, `snippet`, `imageUrl` of what the post shares |
| `author` | `uid`, `name`, `profileUrl`, `credential`, `followers` |
| `source`, `profile`, `searchQuery` | Which input produced the row |

### FAQ

#### Do I need a Quora account or cookies?

No. Profiles and search work with nothing but a link or a keyword. The `cookies` field exists only for people who want a run to use their own account.

#### How many posts can I get from one profile?

All of them. Set `maxPostsPerSource` to `0`. A profile with 200+ posts takes a minute or two.

#### Why do other tools stop at 20 to 40 posts?

That is where Quora ends a profile's post list for logged-out visitors. This actor carries on past that point.

#### Is there a limit on full histories and search?

Reading past the first ~30 posts of a profile, and post search, run on a shared signed-in session with a daily page budget across all users. On the rare day that budget runs out, runs still return the posts Quora shows logged out, and the log says so; full histories and search come back at 00:00 UTC. Adding your own Quora cookies in `cookies` skips the shared budget.

#### Does it scrape answers or questions?

No, posts only. For questions and their answers, use the [Quora Scraper](https://apify.com/memo23/quora-scraper).

#### Why is `text` empty on some posts?

Those posts are link shares: the whole post is an embedded Quora answer or web page. The shared item is in `sharedContent` and `links`.

#### What order do profile posts come in?

The order Quora shows on the profile's Posts tab, newest first.

#### Can I filter search results by date?

Yes: `searchTime` takes past hour, day, week, month or year. A search link with `time=` in it uses that period.

#### What happens with a profile link that doesn't exist?

It is skipped with a warning in the log, and the run carries on with the other inputs.

#### Is there a free tier?

On the Apify free plan a run returns up to 100 posts, enough to test the output. A paid plan lifts the cap.

#### How is it priced?

$0.50 per 1,000 posts, plus a small start fee per run. You can set a maximum cost per run in Apify, and the actor stops cleanly when it is reached.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab. Issues are answered quickly.

### Additional Services

Need Quora data in a specific format, on a schedule, or pushed into your database or CRM? Open an issue describing what you need, or email muhamed.didovic@gmail.com for custom work.

### Explore More Scrapers

- [Quora Scraper](https://apify.com/memo23/quora-scraper): Quora questions, every answer, and Spaces, no login
- [Reddit Scraper](https://apify.com/memo23/reddit-scraper): Reddit posts, users and subreddits
- [LinkedIn Posts Scraper](https://apify.com/memo23/linkedin-posts-scraper): posts from LinkedIn profiles and companies, no cookies
- [Medium Article Scraper](https://apify.com/memo23/medium-article-scraper): Medium articles with full text
- [Threads Scraper](https://apify.com/memo23/threads-scraper): Threads posts, replies and profiles

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/quora-posts-scraper`).

**Purpose:** Quora posts from profiles (full history) or keyword post search, one row per post, no login or cookies.

**Minimal input:**

```json
{ "usernames": ["Adam-DAngelo"], "maxPostsPerSource": 20, "maxItems": 20 }
```

**Output:** one dataset row per post: postId, url, title, text, images, links, upvotes, views, shares, comments, createdAt, updatedAt, accessOption, isPinned, space {id, name, url, followers}, sharedContent {type, url, title, snippet, imageUrl}, author {uid, name, profileUrl, credential, followers}, source, profile, searchQuery, scrapedAt.

**Behaviors an agent should know:**

- Always set `maxItems`. `maxPostsPerSource: 0` reads a profile's whole history (hundreds of rows for active writers).
- Inputs combine: profiles run first, then searches. Duplicate posts within one source are dropped.
- Search terms use `searchTime` (`all_times`, `hour`, `day`, `week`, `month`, `year`).
- Billing: one dataset-item event per post returned, plus a start event. Skipped or failed inputs cost nothing.
- Posts only: answers, questions, Spaces and topics are not returned.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Quora, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper reads only posts that Quora shows publicly to its visitors: no private messages, drafts, paywalled Space content, or anything visible only to a post's author. Users are responsible for ensuring their use complies with Quora's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

quora posts scraper, quora scraper, scrape quora posts, quora profile scraper, quora API, Apify quora, quora post search, quora search scraper, quora user posts export, quora no login scraper, quora data extraction, social media post scraper, competitor content monitoring, brand mention tracking, quora content analysis, topic research data, long-form text dataset, AI training text data, creator analytics, Q\&A platform data

# Actor input Schema

## `startUrls` (type: `array`):

Quora profile links (e.g. https://www.quora.com/profile/Adam-DAngelo, any tab) or post-search links (https://www.quora.com/search?q=remote%20work\&type=post). Each profile returns its posts; each search returns matching posts.

## `usernames` (type: `array`):

Instead of links: the part after /profile/ in the profile link, e.g. Adam-DAngelo.

## `searchQueries` (type: `array`):

Keywords to search Quora posts for, e.g. remote work. No login or cookies needed.

## `searchTime` (type: `string`):

Only posts from this period, for search terms and search links without their own time filter.

## `maxPostsPerSource` (type: `integer`):

Most posts to return for each profile or search term. 0 = every post the profile has (full history).

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

Most posts this run returns across all profiles and searches.

## `cookies` (type: `string`):

Not needed: the actor reads full post histories and post search without your login. Only add cookies to use your own account instead (a "name=value; …" string or the JSON array from a cookie-editor extension).

## `proxy` (type: `object`):

Leave empty: the actor brings its own residential proxy. Set it only to route requests through your own proxy.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.quora.com/profile/Adam-DAngelo"
  ],
  "searchTime": "all_times",
  "maxPostsPerSource": 100,
  "maxItems": 1000
}
```

# Actor output Schema

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

Posts with full text, upvotes, views, shares, date, author and Space.

# 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 = {
    "startUrls": [
        "https://www.quora.com/profile/Adam-DAngelo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/quora-posts-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 = { "startUrls": ["https://www.quora.com/profile/Adam-DAngelo"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/quora-posts-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 '{
  "startUrls": [
    "https://www.quora.com/profile/Adam-DAngelo"
  ]
}' |
apify call memo23/quora-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/quora-posts-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/07ojUmyg6zRdUgMdE/builds/udIPDrG8gMOx6yfFS/openapi.json
