# Tayara Property Scraper - Tunisia Real Estate Listings (`sian.agency/tayara-property-scraper`) Actor

Scrape property ads from Tayara.tn, Tunisia's biggest classifieds site, by governorate or town: apartments, villas, land, offices and shops for sale or rent. Rows carry the price in TND, private or agency seller and photos, plus area, rooms and phone with full details.

- **URL**: https://apify.com/sian.agency/tayara-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.06 / 1,000 listing searches

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

## Tayara Scraper: Tunisia Real Estate Listings 🇹🇳

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Mubawab Scraper](https://img.shields.io/badge/Store-Mubawab%20Scraper-E8442B)](https://apify.com/sian.agency/mubawab-property-scraper?fpr=sian) [![Expat-Dakar Scraper](https://img.shields.io/badge/Store-Expat--Dakar%20Scraper-1AE392)](https://apify.com/sian.agency/expat-dakar-property-scraper?fpr=sian) [![Bayut Scraper](https://img.shields.io/badge/Store-Bayut%20Scraper-93D500)](https://apify.com/sian.agency/bayut-property-scraper?fpr=sian)

#### 🎉 Every Tayara Immobilier ad in one dataset, with prices in TND and private owners flagged

##### For investors, agencies, analysts and proptech builders who follow the Tunisian property market

***

### 🔎 What is the Tayara Scraper - Tunisia Real Estate Listings — and when should you use it?

The **Tayara Scraper - Tunisia Real Estate Listings** turns public Tayara.tn property ads from any of Tunisia's 24 governorates into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Tunisian apartments, houses and villas, land, offices, shops, room shares and holiday rentals, for sale or to rent, as rows. Each row has the price in Tunisian dinars, the property type, the governorate and town, the seller's name and whether it is a private owner or an agency, the full ad text, every photo and the date it was posted. Switch on full details and each row also says whether the ad is for sale or rent, and adds the floor area, bedrooms, bathrooms, price per m², the map position when the seller set one, and the advertiser's phone. About half of Tayara's property ads come from private owners, and most of them are not on the agency portals.

**Use something else when:** the person wants agency listings with exact GPS from the big Tunisian portal, property in Morocco, or a country other than Tunisia. Use [Mubawab Scraper](https://apify.com/sian.agency/mubawab-property-scraper?fpr=sian) for agency listings in Tunisia and Morocco, with coordinates, rooms and the agency on every full record. Use [Expat-Dakar Scraper](https://apify.com/sian.agency/expat-dakar-property-scraper?fpr=sian) for the same kind of classifieds property data for Senegal. This actor reads what tayara.tn shows a visitor who is not logged in: the Immobilier search results and each ad's own page. It covers property only, not cars, jobs or the rest of Tayara. Ads carry a governorate and a town, not a street address, and Tayara serves at most 10,000 results per search.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/tayara-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want property ads for sale or rent from Tayara.tn in Tunisia using the Apify Actor `sian.agency/tayara-property-scraper`.

Use it when I need: Tunisian apartments, houses and villas, land, offices, shops, room shares and holiday rentals, for sale or to rent, as rows. Each row has the price in Tunisian dinars, the property type, the governorate and town, the seller's name and whether it is a private owner or an agency, the full ad text, every photo and the date it was posted. Switch on full details and each row also says whether the ad is for sale or rent, and adds the floor area, bedrooms, bathrooms, price per m², the map position when the seller set one, and the advertiser's phone. About half of Tayara's property ads come from private owners, and most of them are not on the agency portals.

Don't use it when: the person wants agency listings with exact GPS from the big Tunisian portal, property in Morocco, or a country other than Tunisia — use mubawab-property-scraper or expat-dakar-property-scraper instead.

How to call it: give `locations` a list of Tunisian governorates or towns: `Tunis`, `La Marsa`, `Hammamet`, `Sousse / Khzema`, or `tunisie` for the whole country. Set `propertyType` to `apartment`, `house`, `land`, `office`, `commercial`, `roomShare`, `holidayRental`, `other` or `any`, and `transaction` to `sale`, `rent` or `any` (land and other need `any`). Narrow with `minPrice` and `maxPrice` in TND and `sellerType` (`private` or `professional`); anything a filter excludes is never saved and never billed. `includeDetails` opens each ad for sale or rent, area, rooms, price per m², map position and phone, at an extra charge per listing. To expand ads you already have, set `operation` to `detail` and pass their tayara.tn addresses in `listingUrls`.

Start with this input:
{
  "operation": "search",
  "locations": [
    "La Marsa",
    "Sousse"
  ],
  "propertyType": "apartment",
  "transaction": "rent",
  "sellerType": "private",
  "maxResults": 100
}

Ask me which governorates or towns to cover, which property type, whether they want sales or rentals, any price range in TND, and whether area, rooms and the advertiser's phone are worth the extra per-listing charge, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *List every apartment for rent in La Marsa from a private owner under 2,000 TND a month.*
- *Pull all villas for sale in Hammamet and Nabeul with their area and price per square metre.*
- *Collect today's new land ads across Tunisia and tell me which governorates have the most.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/tayara-property-scraper.md](https://apify.com/sian.agency/tayara-property-scraper.md).

### 📋 Overview

**Want Tayara property data without copying ads by hand?** This Tayara scraper reads the Immobilier section of tayara.tn, Tunisia's biggest classifieds site, governorate by governorate, and returns one row per ad.

**What you get:**

- 🏘️ **Ads the agency portals don't carry**: we matched listing photos against Mubawab Tunisia. In Sousse, 3% of Tayara's apartment rentals were also on Mubawab, and Tayara listed 382 against Mubawab's 118. Even in La Marsa, where Mubawab is strongest, 70% of Tayara's apartments were not there.
- 👤 **Private owners flagged**: every row says whether a private owner or an agency placed the ad. Private owners placed 51% of the 360 ads we sampled across the whole section, and the Seller filter keeps just them.
- 💵 **Prices you can compare**: the asking price or monthly rent in Tunisian dinars on every row, plus floor area and price per m² with full details.
- 🎯 **Pay only for matches**: property type, sale or rent, price band and seller filters are applied before an ad is saved. Ads that fail them cost nothing.
- 💰 **$1.20 per 1,000 listings**: full details are $5.00 per 1,000 on top, and every free run includes 25 listings.
- ✨ **NEW**: tick Add full details to get sale or rent, area, bedrooms, bathrooms, map position and the advertiser's phone in the same run.

***

### ✨ Features

- 🔍 **Listing Search**: name a governorate (Tunis, Sousse, Nabeul), a town (La Marsa, Hammamet, Ennasr) or tunisie for the whole country.
- 📄 **Listing Details**: paste Tayara ad addresses and get the full record for each one.
- 🏠 **Property type**: apartments, houses and villas, land and farms, offices, shops and commercial premises, room shares, holiday rentals or anything.
- 🔑 **Sale or rent**: Tayara's own À Vendre / À Louer filter, or both.
- 💵 **Price band**: a minimum and maximum price in TND. For rentals it is the monthly rent.
- 👤 **Seller filter**: private owners only, or agencies and developers only.
- 🗺️ **All 24 governorates**: Tayara's own place list is built in, so a typo gets a clear message instead of a silent nationwide search.
- 🔁 **No duplicates**: an ad found under two places is saved and billed once.
- 📦 **Clean exports**: JSON, CSV or Excel from the Apify dataset, plus a run report with the numbers and what they cost.

***

### 🎬 Quick Start

Type the governorates or towns you want and pick the property type. Choose sale or rent, add filters if you need them and set how many listings to collect. Press Start, and the ads land in a dataset you can export or read through the API.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~tayara-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "locations": ["La Marsa"], "propertyType": "apartment", "transaction": "rent", "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Name your places

Type one governorate or town per line: Tunis, Sousse, La Marsa, Hammamet. Use tunisie for the whole country.

#### Step 2: Set your filters

Pick the property type, sale or rent, and Max listings. Add a price band or keep only private owners if you need to. Tick Add full details for area, rooms and the phone.

#### Step 3: Run and export

Press Start, then download the listings as JSON, CSV or Excel, or pull them into your own tools through the API.

**That's it! In a minute or two, you'll have:**

- A table of Tayara ads with price in TND, property type, governorate and town
- Who placed each ad, private owner or agency, with the seller's name
- A file you can open in Excel or Google Sheets, or feed to a dashboard

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (Listing Search, default) or `detail` (Listing Details for ads you already have). |
| `locations` | array | No | Governorates or towns, one per line, e.g. Tunis, La Marsa, Hammamet, or Sousse / Khzema. Use tunisie for the whole country. Default: La Marsa. |
| `propertyType` | string | No | `apartment` (default), `house`, `land`, `office`, `commercial`, `roomShare`, `holidayRental`, `other` or `any`. |
| `transaction` | string | No | `any` (default), `sale` or `rent`. |
| `maxResults` | integer | No | Stop after this many listings across all places (1 to 10,000, default 100). Listing Details ignores it. |
| `includeDetails` | boolean | No | Open each ad's own page for sale or rent, area, bedrooms, bathrooms, price per m², map position and phone. Billed per listing. |
| `minPrice` | integer | No | Lowest price in TND (monthly rent for rentals). Ads with no price are left out when a price filter is set. |
| `maxPrice` | integer | No | Highest price in TND. |
| `sellerType` | string | No | `any` (default), `private` or `professional` (agencies and developers with a Tayara shop). |
| `listingUrls` | array | For Listing Details | Tayara ad addresses, e.g. https://www.tayara.tn/item/6ac10347cdf7e8adb5ed0e35/. |

**Example: apartments for rent in La Marsa and Sousse from private owners**

```json
{
  "operation": "search",
  "locations": ["La Marsa", "Sousse"],
  "propertyType": "apartment",
  "transaction": "rent",
  "sellerType": "private",
  "maxResults": 200
}
```

**Example: full details for ads you already have**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://www.tayara.tn/item/appartements/tunis/la-marsa/a-vendre-appartement-s3/6ac10347cdf7e8adb5ed0e35/" },
    { "url": "https://www.tayara.tn/item/6ab2a28d26fc672960d9818f/" }
  ]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **25 fields**. A search row carries:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Tayara's ad ID |
| `listingUrl` | string | Link to the ad on tayara.tn |
| `thumbnail` | string | First photo |
| `propertyTitle` | string | The ad's title, as the seller wrote it (French or Arabic) |
| `propertyType` | string | Apartment, House or villa, Land or farm, Office, Shop or commercial premises, Room share, Holiday rental, Other property |
| `price` / `currency` | number / string | Asking price or monthly rent, in TND |
| `transaction` | string | sale or rent, when you filtered on it (always filled with full details) |
| `governorate` / `delegation` | string | Governorate and town |
| `sellerType` | string | private or professional |
| `sellerName` | string | The name the seller shows on Tayara |
| `isVerifiedSeller` | boolean | Tayara's verified-shop badge |
| `fullDescription` | string | The complete ad text |
| `photos` / `photoCount` | array / integer | Every photo, and how many there are |
| `publishedAt` | string | When the ad was posted |
| `searchLocation` | string | The place you searched that returned this ad |

**Add full details adds:**

| Field | Type | Description |
|-------|------|-------------|
| `transaction` | string | sale or rent, from the ad itself |
| `surfaceM2` | number | Floor or plot area in m² |
| `pricePerM2` | number | Price divided by area, in TND (rent per m² for rentals) |
| `bedrooms` / `bathrooms` | integer | Room counts |
| `latitude` / `longitude` | number | Map position, when the seller set one |
| `phone` | string | The advertiser's phone, as Tayara shows it to every visitor |

An area, room count or price the seller left at 0 comes back empty rather than 0. Rows that could not be read say what to change, and they are never charged.

**Example (Listing Details row, La Marsa, from a real run):**

```json
{
  "thumbnail": "https://cdn.tayara.tn/b6/b661d6ad-affa-4f47-bb05-f7508dc37ef3",
  "listingId": "6ab2a28d26fc672960d9818f",
  "listingUrl": "https://www.tayara.tn/item/6ab2a28d26fc672960d9818f/",
  "propertyTitle": "Appartement s+1 meublé jamais habité",
  "propertyType": "Apartment",
  "price": 2300,
  "currency": "TND",
  "governorate": "Tunis",
  "delegation": "La Marsa",
  "sellerType": "professional",
  "sellerName": "NEWKEY LA MARSA",
  "fullDescription": "NewKey La Marsa vous propose à la location un appartement S+1 meublé jamais habité situé dans l’un des meilleurs quartiers...",
  "photos": [
    "https://cdn.tayara.tn/b6/b661d6ad-affa-4f47-bb05-f7508dc37ef3",
    "https://cdn.tayara.tn/09/09c4d773-5eab-460a-b494-23668533441d"
  ],
  "photoCount": 4,
  "publishedAt": "2026-10-02T15:51:12.000Z",
  "transaction": "rent",
  "surfaceM2": 55,
  "bedrooms": 1,
  "phone": "+21627031000",
  "latitude": 36.90098815,
  "longitude": 10.300953090473,
  "pricePerM2": 42
}
```

***

### 💼 Use Cases & Examples

#### 1. Price and rent benchmarking

**Investors, valuers and journalists tracking what flats and villas cost in each Tunisian city.**

**Input:** a governorate or town, `propertyType: "apartment"`, `transaction: "sale"` or `"rent"`, `includeDetails: true`
**Output:** asking price or rent in TND, area and price per m² for every ad
**Use:** follow the median price per m² in La Marsa, Ennasr or Sahloul month by month.

#### 2. Private-owner lead lists

**Agencies and property managers looking for owners who sell or let without an agent.**

**Input:** your towns, `sellerType: "private"`, `includeDetails: true`
**Output:** private owners' ads with price, area, rooms and the phone they show on Tayara
**Use:** build a call list of owners in your area. Most of these ads never reach the agency portals.

#### 3. Agency and developer watch

**Developers and agency networks keeping an eye on who lists what, where.**

**Input:** a governorate, `sellerType: "professional"`
**Output:** every agency and developer ad with the seller's name, price and photos
**Use:** count each competitor's stock by town and see what they ask for comparable flats.

#### 4. Land and commercial sourcing

**Investors and builders hunting plots, farms, shops and offices.**

**Input:** `propertyType: "land"` or `"commercial"`, a governorate, a `maxPrice`
**Output:** land and commercial ads with price, area and price per m²
**Use:** shortlist plots under budget across Nabeul, Sousse or Sfax in one run.

#### 5. New-listing monitoring

**Proptech apps and alert services that need fresh Tayara ads every day.**

**Input:** your places on a daily schedule, with a small `maxResults`
**Output:** each day's newest ads, newest first, with the posting date
**Use:** compare `listingId` against yesterday's run and alert users before the flats are gone.

#### 6. Holiday rental supply

**Tour operators and short-stay hosts studying summer rentals on the coast.**

**Input:** `propertyType: "holidayRental"`, `locations: ["Hammamet", "Sousse", "Médenine / Djerba Midoun"]`
**Output:** holiday rentals with price, town, photos and the seller type
**Use:** see how much supply each resort town has and what hosts charge.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/tayara-property-scraper').call({
  operation: 'search',
  locations: ['Tunis', 'Ariana'],
  propertyType: 'apartment',
  transaction: 'sale',
  maxResults: 200
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/tayara-property-scraper').call(
    run_input={
        'operation': 'search',
        'locations': ['Hammamet'],
        'propertyType': 'house',
        'includeDetails': True,
        'maxResults': 100,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item.get('price'), item.get('delegation'), item['listingUrl'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~tayara-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "locations": ["Sousse"], "propertyType": "apartment", "transaction": "rent", "maxPrice": 1500, "maxResults": 100}'
```

#### Automation Workflows (n8n / Zapier / Make)

1. **Trigger**: a daily schedule, one run per town
2. **HTTP Request**: call the actor's API with your places and filters
3. **Process**: keep the ads whose `listingId` you have not seen before
4. **Action**: save them to Google Sheets or Airtable, or post them to Slack or email

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run, with every filter and Add full details
- No credit card required
- Enough to check the data for your town before you scale up

#### PAID Tier (Production Ready)

- **Up to 10,000 listings** per run
- **Listing Search**: $1.20 per 1,000 listings, down to $0.94 on higher Apify plans
- **Listing Details**: $5.00 per 1,000 listings, billed only when the full record is added
- A $0.005 start fee per run
- Only listings that are returned are charged. Error rows and filtered-out ads cost nothing.

A search page of 30 ads takes well under a second, so a town of a few hundred ads finishes in about a minute. Add full details opens each ad's own page and takes longer.

💰 **A lower price per listing than the generic Tayara scrapers on the Store**, which charge $2.40 to $3.50 per 1,000 and mix property with cars and phones.

🔗 [View current pricing](https://apify.com/sian.agency/tayara-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Do I need a Tayara account?**
A: No. Name a governorate or town and press Start. The actor collects only what Tayara shows a visitor who is not logged in.

**Q: Is this the same data as Mubawab?**
A: Mostly not. We matched listing photos between Tayara and Mubawab Tunisia on 2026-10-03. In La Marsa, where Mubawab is strongest (2,715 apartment ads against Tayara's 143), 30% of Tayara's apartments also appeared on Mubawab. In Sousse rentals, where Tayara is bigger (382 against 118), 3% did. A control comparison across different cities matched none.

**Q: How do I know if an ad is from a private owner?**
A: Every row has a seller type. Professional means the seller runs a Tayara shop: agencies, developers and brokers. Private means everyone else. The Seller filter keeps only one or the other, and filtered ads are not charged.

**Q: Why is my town not found?**
A: The actor knows Tayara's 24 governorates and the towns Tayara lists for them. Some ads use their own spelling, like Khzema or Chatt mariem. Write the governorate first and the town as the ads spell it: Sousse / Khzema. If Tayara doesn't know it, you get an error row and no charge.

**Q: What does Add full details cost?**
A: One Listing Details event per listing on top of the search row ($5.00 per 1,000). It opens each ad's own page and adds sale or rent, area, bedrooms, bathrooms, price per m², map position and the advertiser's phone.

**Q: Why do some ads have no price, area or room count?**
A: The seller left them empty or entered 0. The actor returns an empty value rather than a 0, so your averages are not dragged down.

**Q: How do I scrape the whole country?**
A: Use tunisie as the location. Tayara serves at most 10,000 ads per search, so to cover all of Immobilier (about 13,600 ads) run each property type separately, or list the governorates one per line.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, exported straight from the Apify dataset.

***

### 🐛 Troubleshooting

**A location came back as an error row**

- Check the spelling against Tayara's own place names, or write it as Governorate / Town
- Use the governorate alone (Sousse) to cover all its towns

**Fewer listings than Tayara shows**

- Your price, sale or rent, or seller filter left the rest out, and the run log says how many
- Ads with no price are dropped when a price filter is set

**The transaction field is empty**

- Search rows only know sale or rent when you filter on it. Tick Add full details to read it from every ad

**The run stopped at 25 listings**

- Free Apify plans are capped at 25 listings per run. Add a payment method to lift the cap

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world, including Tunisia's Organic Law 2004-63 on personal data. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Tayara is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Tayara.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's Issues tab](https://apify.com/sian.agency/tayara-property-scraper/issues)
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/tayara-property-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Search returns Tayara property ads for the Tunisian governorates or towns you name. Listing Details opens Tayara ad addresses you already have and returns the full record. Tick Add full details on a search to get both in one run.

## `locations` (type: `array`):

Tunisian governorates or towns, one per line: Tunis, Sousse, Ariana, Nabeul, or a town such as La Marsa, Hammamet, Ennasr or Sahloul. Accents are optional. For a town Tayara spells its own way, write the governorate first: Sousse / Khzema. Use tunisie for the whole country. Each line runs its own search. A place Tayara doesn't know gets an error row and isn't charged.

## `propertyType` (type: `string`):

Which Tayara Immobilier section to search. Apartments are the biggest, about a third of all property ads.

## `transaction` (type: `string`):

Sale or rent, as the seller marked the ad. Some ads carry no sale or rent marker and appear only under Both, and that is true of every Land and Other property ad, so those two types need Both.

## `maxResults` (type: `integer`):

Stop after this many listings across all locations. The run stops exactly at this number. Free accounts stop at 25. Tayara shows at most 10,000 ads per search, so for more split the search by town or property type. Listing Details ignores it and returns every ad you pasted.

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

Opens each ad's own page and adds sale or rent, floor area, bedrooms, bathrooms, price per m², map position when the seller set one, and the advertiser's phone. Each listing also bills one Listing Details event.

## `minPrice` (type: `integer`):

Lowest price in Tunisian dinars. For rentals this is the monthly rent. Ads without a price are left out when you set a price filter.

## `maxPrice` (type: `integer`):

Highest price in Tunisian dinars. For rentals this is the monthly rent. Leave it empty for no ceiling.

## `sellerType` (type: `string`):

Who placed the ad. Professionals are sellers with a Tayara shop: agencies, developers and brokers. Private owners are everyone else, about half of all property ads.

## `listingUrls` (type: `array`):

Tayara ad addresses, one per line, such as https://www.tayara.tn/item/appartements/tunis/la-marsa/a-vendre-appartement-s3/6ac10347cdf7e8adb5ed0e35/ or the short https://www.tayara.tn/item/6ac10347cdf7e8adb5ed0e35/.

## Actor input object example

```json
{
  "operation": "search",
  "locations": [
    "La Marsa"
  ],
  "propertyType": "apartment",
  "transaction": "any",
  "maxResults": 100,
  "includeDetails": false,
  "sellerType": "any"
}
```

# Actor output Schema

## `tayaraListings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "locations": [
        "La Marsa"
    ],
    "propertyType": "apartment",
    "transaction": "any",
    "maxResults": 100,
    "includeDetails": false,
    "sellerType": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/tayara-property-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 = {
    "operation": "search",
    "locations": ["La Marsa"],
    "propertyType": "apartment",
    "transaction": "any",
    "maxResults": 100,
    "includeDetails": False,
    "sellerType": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/tayara-property-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 '{
  "operation": "search",
  "locations": [
    "La Marsa"
  ],
  "propertyType": "apartment",
  "transaction": "any",
  "maxResults": 100,
  "includeDetails": false,
  "sellerType": "any"
}' |
apify call sian.agency/tayara-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/tayara-property-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/oQEz3KbbHNPe9vL0v/builds/bfTRaBKPsdMwRoNlG/openapi.json
