# Uneed Scraper (`automation-lab/uneed-scraper`) Actor

Extract public Uneed.best startup and tool listings for lead generation, competitor research, and market maps.

- **URL**: https://apify.com/automation-lab/uneed-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Uneed Scraper

Extract startup, SaaS, and tool listings from Uneed.best for lead generation, competitor monitoring, and market research.

### What does Uneed Scraper do?

Uneed Scraper collects public product data from https://www.uneed.best.

It can scrape:

- Category pages such as Marketing, Business, Design, and Development
- Tag pages such as AI, Analytics, SEO, and Productivity
- Alternative pages such as Ahrefs alternatives
- Individual product detail pages
- The public sitemap for bulk product discovery

### Who is it for?

This actor is useful for growth, sales, and research teams.

- 🧲 Lead generation teams can discover startup websites and public contact channels.
- 📊 Market researchers can monitor new tools by tag or category.
- 🕵️ Competitor analysts can map alternative pages and adjacent products.
- 🚀 Indie hackers can benchmark positioning, pricing, and launch pages.
- 🧰 Agencies can build tool directories and outreach lists.

### Why use this actor?

Uneed is a curated product directory with startup and tool metadata.

Manual browsing is slow when you need structured rows.

This actor turns public Uneed pages into clean dataset records.

### How much does it cost to scrape Uneed products?

The actor uses pay-per-event pricing.

You pay a $0.005 start fee and a tiered per-result fee for saved products.

The formula-derived BRONZE result price is $0.000074621 per product, with lower prices on higher Apify tiers.

Typical small tests with 20 results are inexpensive.

Large sitemap runs scale with the number of product records saved.

### Data fields

| Field | Description |
|---|---|
| `id` | Uneed numeric product ID |
| `name` | Product or tool name |
| `slug` | Uneed slug |
| `uneedUrl` | Uneed product profile URL |
| `websiteUrl` | External product website |
| `description` | Short public description |
| `richDescription` | Long description when visible |
| `categoryName` | Category name when present |
| `categorySlug` | Category slug when present |
| `tags` | Public Uneed tags |
| `tagSlugs` | Tag slugs |
| `pricing` | Public pricing text |
| `email` | Public email when available |
| `twitter` | Twitter/X URL |
| `linkedin` | LinkedIn URL |
| `github` | GitHub URL |
| `instagram` | Instagram URL |
| `facebook` | Facebook URL |
| `youtube` | YouTube URL |
| `bluesky` | Bluesky URL |
| `logoUrl` | Logo image URL |
| `mediaUrls` | Product media URLs |
| `dealCodes` | Public coupon codes |
| `dealDescriptions` | Public deal text |
| `voteCount` | Vote count from public payload |
| `isPremium` | Premium listing flag |
| `isDofollow` | Dofollow flag |
| `isOnSale` | Sale flag |
| `sourceUrl` | Page that produced the record |
| `scrapedAt` | ISO scrape timestamp |

### Input options

The main input is `startUrls`.

You can provide one URL or many URLs.

Supported URL types:

- `https://www.uneed.best/tool/creem`
- `https://www.uneed.best/categories/marketing`
- `https://www.uneed.best/tags/ai`
- `https://www.uneed.best/alternatives/ahrefs`
- `https://www.uneed.best/sitemap.xml`

### Example input

```json
{
  "startUrls": [
    { "url": "https://www.uneed.best/categories/marketing" },
    { "url": "https://www.uneed.best/tags/ai" }
  ],
  "maxItems": 50,
  "includeDetails": true,
  "useSitemap": true
}
````

### Output example

```json
{
  "name": "Creem",
  "slug": "creem",
  "uneedUrl": "https://www.uneed.best/tool/creem",
  "websiteUrl": "https://creem.io",
  "description": "Smooth payments for SaaS and Indie Hackers that don't break the bank",
  "tags": ["E-Commerce", "Money"],
  "pricing": "Freemium",
  "voteCount": 1,
  "sourceUrl": "https://www.uneed.best/tool/creem"
}
```

### How to scrape a category

1. Open the actor on Apify.
2. Paste a Uneed category URL.
3. Set `maxItems` to a small number for the first run.
4. Keep `includeDetails` enabled for richer fields.
5. Start the run.
6. Export results as JSON, CSV, Excel, or via API.

### How to scrape the sitemap

Leave `startUrls` empty or pass `https://www.uneed.best/sitemap.xml`.

Set `maxItems` to the number of product pages you want.

The actor filters sitemap entries to `/tool/` pages.

### Tips for best results

- Start with 20 to 50 items for testing.
- Use category and tag URLs for focused lists.
- Use sitemap discovery for broad product discovery.
- Enable detail pages when you need social links and pricing.
- Deduplicate downstream by `slug` or `uneedUrl`.

### Integrations

Use this actor with:

- CRM enrichment workflows
- Lead scoring pipelines
- Google Sheets exports
- Airtable product databases
- BI dashboards
- Competitor monitoring jobs
- Weekly startup discovery alerts

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/uneed-scraper').call({
  startUrls: [{ url: 'https://www.uneed.best/tags/ai' }],
  maxItems: 25,
  includeDetails: true
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/uneed-scraper').call(run_input={
    'startUrls': [{'url': 'https://www.uneed.best/categories/marketing'}],
    'maxItems': 25,
    'includeDetails': True,
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~uneed-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://www.uneed.best/tags/ai"}],"maxItems":25}'
```

### MCP usage

You can call this actor through Apify MCP from Claude Desktop, Claude Code, or other MCP-compatible clients.

MCP URL:

```text
https://mcp.apify.com/?tools=automation-lab/uneed-scraper
```

Claude Code setup:

```bash
claude mcp add apify-uneed "https://mcp.apify.com/?tools=automation-lab/uneed-scraper"
```

Claude Desktop JSON configuration:

```json
{
  "mcpServers": {
    "apify-uneed": {
      "url": "https://mcp.apify.com/?tools=automation-lab/uneed-scraper"
    }
  }
}
```

Example prompts:

- "Scrape 50 AI tools from Uneed and summarize the most common tags."
- "Find marketing tools on Uneed with public websites and social links."
- "Build a CSV of Uneed alternatives for Ahrefs."

### Data quality notes

The actor only extracts public data visible in Uneed SSR payloads.

Some pages have more detail than others.

Some products may not list social profiles or pricing.

Fields without public data are returned as `null` or empty arrays.

### Legality

This actor extracts publicly available web data.

You are responsible for using the data lawfully.

Respect privacy, intellectual property, and applicable terms.

Do not use scraped contact data for spam.

### Troubleshooting

#### Why did I get fewer results than requested?

A category or tag page may contain fewer public products than your limit.

Use sitemap mode for broader discovery.

#### Why are some social fields empty?

Uneed only includes those fields when the product owner has published them.

#### Why are charges ignored locally?

Local `apify run` does not use platform pay-per-event billing.

Cloud runs record charge events after deployment.

### Related scrapers

Other Automation Lab actors that may pair well:

- https://apify.com/automation-lab/product-hunt-scraper
- https://apify.com/automation-lab/website-emails-scraper
- https://apify.com/automation-lab/linkedin-company-scraper
- https://apify.com/automation-lab/google-maps-lead-finder

### Changelog

#### 0.1

Initial version with HTTP-only Nuxt payload extraction.

### Limits

This actor does not log in.

It does not scrape private dashboards.

It does not bypass access controls.

It does not enrich data from third-party sources.

### Support

If a public Uneed page changes structure, open an Apify issue with the run ID and input.

### FAQ

#### Can I scrape all Uneed tools?

Yes. Use sitemap mode and set a larger `maxItems` value.

#### Can I scrape one tool?

Yes. Pass a `/tool/<slug>` URL and set `maxItems` to `1`.

#### Can I export to CSV?

Yes. Apify datasets support CSV, JSON, Excel, XML, and RSS exports.

#### Does it use a browser?

No. It uses fast HTTP requests and parses public Nuxt SSR data.

#### Does it require a proxy?

No proxy is configured by default.

### Field mapping

Use `uneedUrl` for source attribution.

Use `websiteUrl` for external outreach or enrichment.

Use `tags` and `categoryName` for segmentation.

Use `pricing` for go-to-market analysis.

Use `voteCount` for relative popularity signals.

### Operational recommendations

Schedule weekly runs for new product discovery.

Store historical snapshots to detect listing changes.

Filter by tags for specific markets.

Combine with email enrichment only when legally appropriate.

### Version

Current actor version: `0.1`.

# Actor input Schema

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

Uneed URLs to process. Supports /tool/<slug>, /categories/<slug>, /tags/<slug>, /alternatives/<slug>, and /sitemap.xml. Leave empty to discover products from the sitemap.

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

Maximum number of unique Uneed tool/product records to save.

## `includeDetails` (type: `boolean`):

When scraping listing pages, also follow discovered Uneed product pages for richer contact, social, pricing, and media fields.

## `useSitemap` (type: `boolean`):

If no start URLs are provided, read Uneed's public sitemap and scrape /tool/ product pages until the maxItems limit is reached.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.uneed.best/categories/marketing"
    },
    {
      "url": "https://www.uneed.best/tags/ai"
    }
  ],
  "maxItems": 20,
  "includeDetails": true,
  "useSitemap": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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": [
        {
            "url": "https://www.uneed.best/categories/marketing"
        },
        {
            "url": "https://www.uneed.best/tags/ai"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/uneed-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": [
        { "url": "https://www.uneed.best/categories/marketing" },
        { "url": "https://www.uneed.best/tags/ai" },
    ],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/uneed-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.uneed.best/categories/marketing"
    },
    {
      "url": "https://www.uneed.best/tags/ai"
    }
  ],
  "maxItems": 20
}' |
apify call automation-lab/uneed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/uneed-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Uneed Scraper",
        "description": "Extract public Uneed.best startup and tool listings for lead generation, competitor research, and market maps.",
        "version": "0.1",
        "x-build-id": "P8WxNaE4izAOEFndv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~uneed-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-uneed-scraper",
                "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/automation-lab~uneed-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-uneed-scraper",
                "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/automation-lab~uneed-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-uneed-scraper",
                "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": {
                    "startUrls": {
                        "title": "🔗 Start URLs",
                        "type": "array",
                        "description": "Uneed URLs to process. Supports /tool/<slug>, /categories/<slug>, /tags/<slug>, /alternatives/<slug>, and /sitemap.xml. Leave empty to discover products from the sitemap.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum tools",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of unique Uneed tool/product records to save.",
                        "default": 50
                    },
                    "includeDetails": {
                        "title": "Fetch detail pages",
                        "type": "boolean",
                        "description": "When scraping listing pages, also follow discovered Uneed product pages for richer contact, social, pricing, and media fields.",
                        "default": true
                    },
                    "useSitemap": {
                        "title": "Use sitemap when start URLs are empty",
                        "type": "boolean",
                        "description": "If no start URLs are provided, read Uneed's public sitemap and scrape /tool/ product pages until the maxItems limit is reached.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
