# Doha Tickets Scraper (`aboo.script/doha-tickets-scraper`) Actor

⚡ Fast Doha Tickets scraper. No login, no API key. Get Qatar attractions, theme parks, desert safaris, museums, cruises and tours by home, attraction or experience URL, with price, discount, every ticket option, rating, reviews, availability, highlights, location and images.

- **URL**: https://apify.com/aboo.script/doha-tickets-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Doha Tickets Scraper

![Doha Tickets Scraper](https://i.ibb.co/LzYB23pb/doha-tickets-banner.png)

**Doha Tickets Scraper** extracts attractions, tours and experiences in Qatar from [Doha Tickets](https://www.doha-tickets.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste the Doha Tickets home page, an attraction page or an experience page, and get the title, price and discount, every ticket option with its own price, rating, reviews, availability, highlights, inclusions, location and images for every experience. No account or login required.

### Introduction

[Doha Tickets](https://www.doha-tickets.com/) is a booking guide for Doha, curated by Headout, that sells tickets to the city's top attractions: theme parks such as Doha Quest and Angry Birds World, water parks, museums, desert safaris, dhow cruises, city tours and airport services. Travel agencies, tour operators and market researchers use its prices and offers to follow the Qatar tourism market.

This actor collects the same public information you see in your browser and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Doha Tickets?

- 🏷️ Title, attraction, category and subcategory
- 💲 Price, original price, discount and currency, in the currency you choose
- 🎟️ Every ticket option with its own price, discount, description, duration and group size
- ⭐ Rating, number of reviews and the top reviews with author, traveler type and date
- 📅 Next available date and spots left
- ✅ Free cancellation and rescheduling windows, mobile ticket, instant confirmation, hotel pickup
- 📝 Description, highlights, inclusions, exclusions, know before you go and ticket delivery
- 📍 Address and GPS coordinates
- 🖼️ Images and video
- 🔗 Direct URL to each experience page and its attraction page

### Use Cases

- 📈 **Market research**: track attraction prices and discounts across Doha and spot the most popular experiences.
- 🕵️ **Competitor monitoring**: compare your own tour or ticket prices with what Doha Tickets sells.
- 💸 **Price tracking**: schedule daily runs to follow price changes and new offers.
- 🗂️ **Database building**: build your own catalog of Qatar attractions with descriptions, images and locations.
- 🤖 **AI and automation**: feed clean, structured data into spreadsheets, dashboards, or AI workflows.

### How to scrape Doha Tickets step by step

1. Paste one or more Doha Tickets URLs into **Start URLs**.
2. Set **Maximum number of results** to how many experiences you want per URL.
3. Pick a **Currency** if you want prices in something other than Qatari riyals.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Doha Tickets URLs to scrape. Supported pages: the home page (all Doha experiences, most popular first), attraction and category pages such as `https://www.doha-tickets.com/desert-safari/` or `https://www.doha-tickets.com/tours/`, language versions such as `https://www.doha-tickets.com/de/`, and single experience pages on `book.doha-tickets.com`. Pages in another language return texts in that language.
- **Maximum number of results**: how many experiences to collect for each start URL. Set 0 for no limit.
- **Currency**: the currency for all prices (Qatari riyal by default). An experience URL that already contains a currency keeps it.

### Input Examples

Scrape the most popular experiences from the home page:

```json
{
  "startUrls": [{ "url": "https://www.doha-tickets.com/" }],
  "maxResults": 5,
  "currency": "QAR"
}
```

### Output

Each experience is saved as one item in the dataset. Here is an example of a single item:

```json
{
  "url": "https://book.doha-tickets.com/doha-quest/doha-quest-theme-park-tickets-e-36017/",
  "id": 36017,
  "title": "Doha Quest Theme Park Tickets",
  "language": "en",
  "city": "Doha",
  "country": "Qatar",
  "category": "Tickets",
  "subcategory": "Theme Parks",
  "attraction": "Doha Quest Theme Park",
  "attractionUrl": "https://book.doha-tickets.com/doha-quest-c-6207/",
  "price": 225,
  "originalPrice": 235,
  "discountPercent": 4,
  "currency": "QAR",
  "priceType": "Per Person",
  "hasMultiplePrices": true,
  "ticketOptions": [
    {
      "id": 78577,
      "name": "Doha Quest Tickets",
      "description": "- Entry into Doha Quest Theme Park\n- Unlimited access to all rides and attractions across all three themed zones, includ...",
      "price": 225,
      "originalPrice": 235,
      "discountPercent": 4,
      "currency": "QAR",
      "priceType": "Per Person",
      "groupSize": null,
      "isOpenDated": false,
      "tours": [
        {
          "id": 76283,
          "name": "General Admission",
          "durationMinutes": null,
          "minGuests": 1,
          "maxGuests": 10
        }
      ]
    },
    {
      "id": 105390,
      "name": "Doha Quest + iFly Quest (Indoor Skydiving) Tickets",
      "description": "- Entry into Doha Quest Theme Park\n- Unlimited access to all rides and attractions across all three themed zones, includ...",
      "price": 370,
      "originalPrice": 435,
      "discountPercent": 15,
      "currency": "QAR",
      "priceType": "Per Person",
      "groupSize": null,
      "isOpenDated": false,
      "tours": [
        {
          "id": 99579,
          "name": "General Admission Combo Tickets",
          "durationMinutes": null,
          "minGuests": 1,
          "maxGuests": 10
        }
      ]
    }
  ],
  "rating": 4.6,
  "reviewCount": 235,
  "durationMinutes": null,
  "maxDurationMinutes": null,
  "nextAvailableDate": "2026-10-22T00:00:00Z",
  "nextAvailableSpots": 2,
  "availability": "Unlimited",
  "features": [
    "Explore at your pace: Choose your entry time, stay as long as you like",
    "Free cancellation: Free cancellation up to 48 hours before the start of your experience",
    "Book now, pay later: Book now without paying anything. Cancel for free if your plans change.",
    "Instant confirmation",
    "Mobile ticket"
  ],
  "hasFreeCancellation": true,
  "cancellableUpToHours": 48,
  "isReschedulable": false,
  "reschedulableUpToHours": null,
  "hasMobileTicket": true,
  "hasInstantConfirmation": true,
  "hasSkipTheLine": false,
  "hasHotelPickup": false,
  "shortDescription": "Book Doha Quest Theme Park tickets to enjoy 30+ rides, immersive time zones, record-breaking coasters, and indoor fun for families and thrill-seekers.",
  "description": "Your experience\n\nExperience the thrill of time travel at Doha Quest, a first-of-its-kind theme park in Qatar with over 30 world-class rides and attractions, plu...",
  "highlights": [
    "Explore Qatar’s first-of-its-kind indoor theme park—spanning 32,000 sqm with record-breaking rides, immersive zones, and all-ages entertainment.",
    "Journey through three time-themed zones: Oryxville (Past), City of Imagination (Present), and Gravity (Future)."
  ],
  "inclusions": [
    "Entry into Doha Quest Theme Park",
    "Unlimited access to all rides and attractions",
    "Locker services for large bags/suitcases"
  ],
  "exclusions": ["Meals and beverages", "Redemption games"],
  "knowBeforeYouGo": "Know before you go\n\nWhat to bring\n\nBring a valid photo ID, comfortable clothing suitable for physical activity, and clos...",
  "ticketDelivery": "Your voucher will be emailed to you shortly.\n\nDisplay the voucher on your mobile phone with a valid photo ID at the starting point.\n\nPlease check your final voucher for the starting point details & specific instructions.",
  "address": "Doha Quest, Oasis Gate 2, Al Khaleej, Doha, Qatar",
  "latitude": 25.28521156311035,
  "longitude": 51.51958084106445,
  "endAddress": null,
  "image": "https://cdn-imgix.headout.com/media/images/bd33a323-437c-46e4-a4ab-152df0621d30-1751892944982-289725.jpg",
  "images": [
    "https://cdn-imgix.headout.com/media/images/bd33a323-437c-46e4-a4ab-152df0621d30-1751892944982-289725.jpg",
    "https://cdn-imgix.headout.com/media/images/370cdcd4-0912-4dcb-bf6a-3c17534e9548-1751892996970-289706.jpg"
  ],
  "videoUrl": null,
  "topReviews": [
    {
      "id": 16187110,
      "rating": 5,
      "text": "We had a great experience with this booking and really enjoyed both Meryal Waterpark and Doha Quest...",
      "author": "Amr Ibrahim",
      "authorCountry": null,
      "travelerType": "Family",
      "date": "2026-09-26T16:28:04.000Z"
    }
  ],
  "listedDate": "2026-07-27T00:00:00Z"
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Only Doha Tickets pages are supported: the home page, attraction and category pages, their language versions, and experience pages. Other URLs, including the "things to do" and collection pages of the booking site, are skipped.
- Attraction pages return the experiences they list, so a small attraction may have only one or two results.
- Prices are the starting "from" prices shown on the website for each ticket option. Prices for a specific date or for children may differ on the booking calendar.
- Some texts stay in English on language versions when Doha Tickets has no translation for them.
- An experience listed on several of your start URLs in the same language is scraped once.
- Fields such as duration, attraction or video are `null` when the experience does not show them.

### Why use the Doha Tickets Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🎟️ **Every ticket option**: get each option with its own price and discount, not only the cheapest one.
- 💱 **Your currency**: choose from 16 currencies, including QAR, USD, EUR, GBP, AED and SAR.
- 🌍 **Many languages**: scrape the German, French, Spanish, Italian, Dutch, Portuguese, Polish, Russian or Turkish version.
- 🧹 **Clean data**: numbers are real numbers, dates use one standard format, and text is free of HTML.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many results can I scrape?

Set any number in **Maximum number of results**, or 0 for no limit. The home page lists every Doha experience on the site, about 50 at the moment.

#### Do I need a Doha Tickets account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh prices automatically.

#### Can I request a new feature or filter?

Yes. Right now the actor supports start URLs and a currency choice. If you need other inputs, such as prices for a specific date, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other tours and attractions platforms?

- [Rathin Scraper](https://apify.com/aboo.script/rathin-scraper): UAE attractions, tours and tickets in Dubai and Abu Dhabi.
- [Rayna Tours Scraper](https://apify.com/aboo.script/raynatours-scraper): tours, attractions and events in 50+ cities.
- [Tiqets Scraper - Attractions & Tours](https://apify.com/aboo.script/tiqets-scraper): attractions, tours and ticket prices worldwide.
- [GetYourGuide Scraper - Activities & Attractions](https://apify.com/aboo.script/getyourguide-scraper): activities, tours and attraction tickets worldwide.
- [Viator Scraper](https://apify.com/aboo.script/viator-scraper): tours and activities with prices and reviews.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Doha Tickets](https://www.doha-tickets.com/)

# Actor input Schema

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

Doha Tickets URLs to start with: the home page (https://www.doha-tickets.com/), an attraction page (e.g. https://www.doha-tickets.com/desert-safari/), a language version (e.g. https://www.doha-tickets.com/de/), or an experience page on book.doha-tickets.com. Attraction pages return every experience they list, in page order.

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

Maximum number of experiences to scrape per start URL. Set 0 for no limit.

## `currency` (type: `string`):

Currency for all prices. An experience URL with its own currencyCode parameter keeps that currency.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.doha-tickets.com/"
    }
  ],
  "maxResults": 5,
  "currency": "QAR"
}
```

# Actor output Schema

## `overview` (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.doha-tickets.com/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/doha-tickets-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.doha-tickets.com/" }] }

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/doha-tickets-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": [
    {
      "url": "https://www.doha-tickets.com/"
    }
  ]
}' |
apify call aboo.script/doha-tickets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/doha-tickets-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/y3ciTFJOedx426oMP/builds/Oq77rdBYr403fa5S2/openapi.json
