# HamroBazaar Nepal Classifieds Scraper (`bareezh_codes/hamrobazaar-nepal-classifieds-scraper`) Actor

Extracts live classified ad listings from HamroBazaar, Nepal's largest online marketplace, across categories like real estate, vehicles, electronics and jobs - with price, seller and location details.

- **URL**: https://apify.com/bareezh\_codes/hamrobazaar-nepal-classifieds-scraper.md
- **Developed by:** [Salman Bareesh](https://apify.com/bareezh_codes) (community)
- **Categories:** E-commerce, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Pull live classified ad listings from **[HamroBazaar](https://hamrobazaar.com/)**, Nepal's largest online marketplace, without touching a browser. This actor is a **HamroBazaar API alternative**: it reads the same server-rendered listing data the site itself sends to your browser, across categories like real estate, vehicles, mobile phones, electronics and jobs, and returns price, seller, location and view-count data as clean JSON.

### Why use HamroBazaar Nepal Classifieds Scraper?

HamroBazaar has no public API, and every existing HamroBazaar integration on GitHub is a hand-rolled, unofficial wrapper that developers rebuild for themselves. This actor does that work once, on the Apify platform, so you don't have to maintain your own scraper.

Main capabilities:

- Reads HamroBazaar's own server-rendered listing data straight out of the page HTML - no headless browser, no login, no `/api/` endpoints (which HamroBazaar's `robots.txt` disallows).
- Covers 9 top-level categories (Real Estate, Vehicles, Mobile Phones & Accessories, Electronics, Fashion & Apparel, Furniture & Appliances, Jobs, Services, Business & Industrial) and automatically walks each category's sub-categories (e.g. "For Sale - Land", "For Rent - Flat & Apartment") to gather more than a single "latest" page's worth of listings.
- Optional keyword and location filters, applied on top of the live data.
- Runs on the Apify platform: scheduling for a recurring feed, instant JSON/CSV/Excel export, API access, and monitoring.

Typical use cases:

- **Real estate & vehicle brokers** tracking new rent/sale listings across Nepal as they're posted.
- **Resellers and exporters** monitoring Nepali prices for electronics, mobile phones, or vehicles.
- **Market research** on Nepal's classifieds/e-commerce activity by category and location.
- **Freelance data providers** who currently hand-build HamroBazaar scrapers per client request - this actor replaces that one-off work.

### What data can HamroBazaar Nepal Classifieds Scraper extract?

| Field | Type | Description |
|---|---|---|
| `title` | string | Listing headline |
| `price`, `currency`, `negotiable` | number, string, boolean | Asking price in NPR and whether it's negotiable |
| `categoryName` | string | HamroBazaar's specific sub-category (e.g. "For Sale - Land") |
| `locationDescription` | string | Seller's district/area - HamroBazaar itself masks this to the first/last two characters on every public listing |
| `sellerName`, `sellerAdCount`, `sellerBadge`, `sellerRating` | string, integer, string, number | Seller identity and reputation signals |
| `createdOn`, `createdTimeShort`, `totalViews` | string, string, integer | When it was posted and how many views it has |
| `imageUrl`, `listingUrl` | string, string | Cover photo and a direct link back to the listing |

See [Output](#output) below for the full field reference and a complete real example.

### How to scrape HamroBazaar

1. Click **Try for free** (or **Run**) on this actor's page.
2. Pick a `category` (defaults to Real Estate).
3. Optionally set `keyword` and/or `location` to narrow the results.
4. Set `maxItems` to cap how many listings you want back.
5. Click **Start** and wait for the run to finish.
6. Open the **Dataset** tab and export as JSON, CSV, or Excel - or pull results programmatically via the **API** tab.

### How much will it cost to scrape HamroBazaar?

You pay only for listings delivered.

| Your Apify discount tier | Price per listing | 1,000 listings |
|---|---|---|
| Free | $0.004 | $4 |
| Bronze | $0.0036 | $3.60 |
| Silver | $0.0034 | $3.40 |
| Gold / Platinum / Diamond | $0.0032 | $3.20 |

Apify's free plan includes $5 of monthly credit - enough for over 1,000 listings at no cost. A run stops automatically once it reaches `maxItems`, once it hits your run's maximum charge (Apify's pay-per-result cost cap), or once it has walked every sub-category it found (up to 50), whichever comes first.

### Input

All fields are optional - running the actor with an empty input (`{}`) returns the latest Real Estate listings. See the **Input** tab for the full configuration schema.

| Field | Type | Default | Description |
|---|---|---|---|
| `category` | string (enum) | `real-estate` | Which HamroBazaar category to scrape: `real-estate`, `vehicles`, `mobile-phones-tablets`, `electronics`, `fashion-beauty`, `furniture-home-living`, `jobs`, `services`, `other` |
| `keyword` | string | `""` (none) | Free-text filter matched against each listing's title and description |
| `location` | string | `""` (all of Nepal) | District/city filter, e.g. `"Kathmandu"` - see the location note below |
| `maxItems` | integer | `100` | Maximum number of listings to return (max `500`) |

Example input for "the first 50 vehicle listings mentioning Pulsar":

```json
{
  "category": "vehicles",
  "keyword": "Pulsar",
  "maxItems": 50
}
```

#### A note on the `location` filter

HamroBazaar masks the location text on **every** public listing to its first two and last two characters (e.g. `"Kathmandu"` is always shown as `"Ka******du"`) - this is a site-wide privacy feature, not something this actor can undo. The `location` input therefore matches only those visible characters (e.g. `"Kathmandu"` matches any masked location starting with `"Ka"` or ending in `"du"`). Treat it as a loose, best-effort filter rather than an exact match.

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. One item is produced per listing, with the same keys every time (`null` when a listing doesn't include that data). These are real items from a live run of this actor (`tests/smoke_input.json`, category `real-estate`):

```json
{
  "id": "3DEF8816-4072-41BE-B780-1BD35EC2D233",
  "title": "3 Aana Land for Sale at Balkot Ward No.2",
  "price": 6000000,
  "currency": "NPR",
  "negotiable": false,
  "categoryName": "For Sale - Land",
  "condition": 1,
  "locationDescription": "Su******ur",
  "sellerName": "Harihar Man Singh Basnet",
  "sellerAdCount": 1,
  "sellerBadge": "No badge",
  "sellerRating": 0,
  "createdOn": "2026-09-17T18:12:43.5030000",
  "createdTimeShort": "2m",
  "imageUrl": "https://hamrobazaar.blr1.cdn.digitaloceanspaces.com/User/Posts/2026/09/17/c0415415-8ec2-c383-6c1c-a8314773ff93.jpeg",
  "totalViews": 0,
  "listingUrl": "https://hamrobazaar.com/detail/listing/listing/3DEF8816-4072-41BE-B780-1BD35EC2D233"
}
```

```json
{
  "id": "30053F5D-1125-4AC9-BBE0-1CF1691BD715",
  "title": "Urgent : माकलबारी गेट नजिक रहेको पसल बिक्रिमा!",
  "price": 249999,
  "currency": "NPR",
  "negotiable": false,
  "categoryName": "Business & Shop For Sale",
  "condition": 1,
  "locationDescription": "Sh******du",
  "sellerName": "Mekh Tamang",
  "sellerAdCount": 1,
  "sellerBadge": "No badge",
  "sellerRating": 0,
  "createdOn": "2026-09-17T17:35:03.0640000",
  "createdTimeShort": "40m",
  "imageUrl": "https://hamrobazaar.blr1.digitaloceanspaces.com/hamrobazaar/User/Posts/2026/09/17/830a84c4-d778-41a7-ae71-7b8d448dbc40.webp",
  "totalViews": 0,
  "listingUrl": "https://hamrobazaar.com/detail/listing/listing/30053F5D-1125-4AC9-BBE0-1CF1691BD715"
}
```

#### Field reference

| Field | Description |
|---|---|
| `id` | HamroBazaar's internal listing ID |
| `title` | Listing headline |
| `price`, `currency`, `negotiable` | Asking price (always `"NPR"`) and whether the seller will negotiate |
| `categoryName` | The specific HamroBazaar sub-category this listing is filed under |
| `condition` | HamroBazaar's raw internal condition code for the listing (undocumented by HamroBazaar itself - passed through as-is rather than guessed) |
| `locationDescription` | Seller's district/area, masked by HamroBazaar to its first/last two characters |
| `sellerName`, `sellerAdCount`, `sellerBadge`, `sellerRating` | Seller's display name, how many ads they've posted, their badge label, and their average rating |
| `createdOn`, `createdTimeShort` | Full timestamp and short relative time (e.g. `"2m"`, `"40m"`) since posting |
| `imageUrl` | Cover photo URL |
| `totalViews` | View count at scrape time |
| `listingUrl` | Direct link to the listing on hamrobazaar.com |

### FAQ, disclaimers, and support

**Is this legal?** Yes. This actor only reads listing data that HamroBazaar itself publishes to every visitor's browser on public pages allowed by [hamrobazaar.com/robots.txt](https://hamrobazaar.com/robots.txt) (`/category/`) - no login, no `/api/` calls, no bypassing of HamroBazaar's own access controls. Seller phone numbers and full location text are already masked by HamroBazaar on every public listing; this actor does not attempt to unmask them.

**Why does `condition` show a plain number?** HamroBazaar's own listing data includes this field but never publishes what each value means, and it doesn't correlate cleanly with "new vs. used" or "for sale vs. for rent" in testing. Rather than guess a label, this actor passes the raw code through unchanged.

**Why did my run return fewer than `maxItems`?** HamroBazaar's category pages only surface a "latest" snapshot per category (no working page-by-page browsing), so this actor also walks that category's sub-categories to gather more. A run returns everything currently available up to `maxItems`, capped at 50 sub-categories per run - a quiet category or narrow keyword/location filter can mean fewer results than requested.

**Can I combine `keyword` and `location`?** Yes, both filters are applied together (AND, not OR).

#### Legal & compliance note

Our actors are ethical and do not extract any private user data, such as email addresses or exact locations. This actor only extracts what sellers have chosen to publish on their public HamroBazaar listing, and HamroBazaar itself already masks phone numbers and full location text on every public listing before this actor ever sees them. You should still be aware that results include seller display names; personal data is protected by the GDPR in the European Union and by other regulations around the world, so you should not repurpose this data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

#### Limits & notes

- Data reflects HamroBazaar's "latest" listings at scrape time per category/sub-category, not a full historical archive of every active listing.
- `other` maps to HamroBazaar's "Business & Industrial" category, the closest verified catch-all - HamroBazaar has no literal "Other" category.
- This actor is coupled to HamroBazaar's current Next.js page structure. If HamroBazaar redeploys its frontend, the parser may need updating.

#### Support

Found a bug or have a feature request? Use the **Issues** tab on this actor's page. For programmatic access, see the **API** tab for ready-made code snippets in your language of choice.

# Actor input Schema

## `category` (type: `string`):

Which HamroBazaar category to scrape.

## `keyword` (type: `string`):

Optional free-text filter applied to each listing's title and description (case-insensitive). Leave empty to skip.

## `location` (type: `string`):

Optional district/city filter, e.g. "Kathmandu". HamroBazaar masks location text on every public listing (e.g. "Ka\*\*\*\*\*\*du"), so this matches only the visible first/last letters HamroBazaar exposes - it is a best-effort filter, not an exact match. Leave empty for all of Nepal.

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

Maximum number of listings to return.

## Actor input object example

```json
{
  "category": "real-estate",
  "keyword": "",
  "location": "",
  "maxItems": 100
}
```

# Actor output Schema

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

One item per HamroBazaar listing

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bareezh_codes/hamrobazaar-nepal-classifieds-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("bareezh_codes/hamrobazaar-nepal-classifieds-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 '{}' |
apify call bareezh_codes/hamrobazaar-nepal-classifieds-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bareezh_codes/hamrobazaar-nepal-classifieds-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/hOjykGh85ljEFyNlY/builds/0ybpMYOUcanfhuVLC/openapi.json
