# Saudi/UAE Store Tech Stack Detector: Salla, Zid, Shopify, Tabby (`pharaoh_data/gulf-store-tech-stack-detector`) Actor

Find which Saudi, UAE, and GCC online stores run on Salla, Zid, or Shopify, which payment and buy-now-pay-later options they offer (Tabby, Tamara, mada, Apple Pay, STC Pay), their marketing pixels, business contact channels, and CR/VAT numbers. A Gulf-focused BuiltWith and Wappalyzer alternative.

- **URL**: https://apify.com/pharaoh_data/gulf-store-tech-stack-detector.md
- **Developed by:** [Pharaoh Data](https://apify.com/pharaoh_data) (community)
- **Categories:** Lead generation, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 website profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Saudi/UAE Store Tech Stack Detector: Salla, Zid, Shopify, Tabby

### See how any Gulf online store sells before you contact it

Paste a list of store or company websites. For each one you get the **e-commerce platform** (Salla, Zid, Shopify, WooCommerce, Magento), the **payment methods and buy-now-pay-later providers** it offers (mada, Apple Pay, STC Pay, Tabby, Tamara, MISpay, Emkan, Madfu), its **marketing pixels** (Snap, TikTok, Meta, X, Google Ads), **Saudi trust badges**, published **CR and VAT numbers**, and **business contact channels**. Every detection comes with the evidence behind it.

It is a BuiltWith and Wappalyzer alternative built for Saudi Arabia, the UAE, and the GCC, with fingerprints that generic tools lack.

**Built for:**

- **Fintech, BNPL, and payment-gateway sales teams:** find Salla and Shopify stores that don't offer Tabby or Tamara yet, or that use a competitor's gateway.
- **Salla and Zid app developers, agencies, and theme builders:** build lead lists of stores on the platform you sell for.
- **Logistics and fulfillment companies:** qualify online stores by platform, size signals, and current delivery partners.
- **Performance-marketing agencies:** see which stores already run Snap, TikTok, or Meta pixels before pitching.
- **Market researchers and investors:** measure platform and BNPL adoption across a list of Gulf merchants.

### What you get for each website

| Field                            | Example                                                                                                                                                                    |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ecommercePlatform`              | `Salla`, `Zid`, `Shopify`, `WooCommerce`, `Magento`, `BigCommerce`                                                                                                         |
| `platformStoreId`                | Salla store ID or `brand.myshopify.com`                                                                                                                                    |
| `paymentMethods`                 | `mada`, `Apple Pay`, `STC Pay`, `Tap Payments`, `HyperPay (OPPWA)`, `Moyasar`, `PayTabs`, `Checkout.com`                                                                   |
| `bnplProviders`                  | `Tabby`, `Tamara`, `MISpay`, `Emkan`, `Madfu`                                                                                                                              |
| `marketingPixels`                | `Snap Pixel`, `TikTok Pixel`, `Meta Pixel`, `X (Twitter) Pixel`, `Google Ads`                                                                                              |
| `technologies`                   | 60+ technologies across analytics, marketing (Klaviyo, Insider, MoEngage), search, reviews, live chat, CMS, frameworks, and hosting, each with `confidence` and `evidence` |
| `trustBadges`                    | `Saudi Business Center`, `Maroof`                                                                                                                                          |
| `businessIds`                    | Saudi commercial registration (CR), Saudi VAT number, UAE TRN, Saudi Business Center certificate, Maroof ID                                                                |
| `country` and `countrySignals`   | `SA`, with reasons such as "Salla store country", "country-code domain", "Saudi CR, VAT, or Saudi Business Center number"                                                  |
| `contacts`                       | Role-based emails (`info@`, `sales@`), unified, toll-free, and landline numbers, WhatsApp presence, brand social profiles                                                  |
| `languages`, `rtl`, `currencies` | `["ar","en"]`, `true`, `["SAR"]`                                                                                                                                           |

**Salla stores are read from the platform's own storefront configuration.** That gives the exact enabled payment methods, all BNPL providers, configured pixels, CR, VAT, and Saudi Business Center certificate, not guesses from page text.

### Quick start

1. Paste websites under **Websites**, one per line: `brand.sa`, `www.brand.com`, or full URLs.
2. Keep **Also read the contact page** on for more contacts and CR/VAT numbers.
3. Run, then open the **Stores** view for the overview or **Business contacts** for outreach fields. Export as CSV, Excel, or JSON, or read the results with the API.

```json
{
    "websites": ["aldakheeloud.com", "niceonesa.com", "mumzworld.com", "jarir.com"],
    "includeContactPage": true,
    "includeEvidence": true,
    "maxConcurrency": 5
}
```

### Example output

Shortened record for a Salla store (illustrative values):

```json
{
    "input": "oud-store.sa",
    "url": "https://oud-store.sa/ar",
    "domain": "oud-store.sa",
    "status": "ok",
    "country": "SA",
    "countrySignals": {
        "SA": [
            "Salla store country",
            "country-code domain",
            "Saudi trust badge",
            "Saudi CR, VAT, or Saudi Business Center number"
        ]
    },
    "ecommercePlatform": "Salla",
    "platformStoreId": "1234567890",
    "isOnlineStore": true,
    "paymentMethods": ["mada", "Credit card", "STC Pay", "Apple Pay", "Cash on delivery"],
    "bnplProviders": ["Tabby", "Tamara", "MISpay", "Emkan", "Madfu"],
    "marketingPixels": ["Meta Pixel", "TikTok Pixel", "Snap Pixel", "X (Twitter) Pixel", "Google Ads"],
    "technologies": [
        { "name": "Salla", "category": "ecommerce", "confidence": "high", "evidence": "cdn.salla.network" },
        {
            "name": "Saudi Business Center",
            "category": "trust",
            "confidence": "high",
            "evidence": "eauthenticate.saudibusiness.gov.sa"
        },
        {
            "name": "Snap Pixel",
            "category": "advertising",
            "confidence": "high",
            "evidence": "Salla store configuration"
        },
        { "name": "Cloudflare", "category": "hosting", "confidence": "high", "evidence": "header server: cloudflare" }
    ],
    "trustBadges": ["Saudi Business Center"],
    "currencies": ["SAR"],
    "businessIds": {
        "commercialRegistration": ["1010000001"],
        "saudiVat": ["300000000000003"],
        "uaeTrn": [],
        "saudiBusinessCenterCertificate": ["0000012345"],
        "maroof": []
    },
    "contacts": {
        "emails": ["care@oud-store.sa"],
        "phones": [{ "number": "+966920000001", "country": "SA", "kind": "unified" }],
        "hasWhatsApp": true,
        "social": {
            "instagram": "https://www.instagram.com/oud_store",
            "snapchat": "https://www.snapchat.com/add/oud_store"
        }
    },
    "languages": ["ar", "en"],
    "rtl": true,
    "pagesAnalyzed": ["https://oud-store.sa/ar", "https://oud-store.sa/ar/contact-us"],
    "scrapedAt": "2026-10-17T20:00:00.000Z"
}
```

Websites that cannot be analyzed are still listed, with `status` set to `failed`, `blocked-by-robots`, or `not-html` and an `error`, so you can see what happened to every input. These records are not billed. The run's `RUN_SUMMARY` record counts platforms, BNPL providers, payment methods, countries, and technologies across the whole list.

### Use it from your tools

```bash
curl -X POST "https://api.apify.com/v2/acts/pharaoh_data~gulf-store-tech-stack-detector/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"websites":["brand1.sa","brand2.ae"]}'
```

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client
    .actor('pharaoh_data/gulf-store-tech-stack-detector')
    .call({ websites: ['brand1.sa', 'brand2.ae'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const sallaWithoutTabby = items.filter((s) => s.ecommercePlatform === 'Salla' && !s.bnplProviders.includes('Tabby'));
```

- **Google Sheets, HubSpot, n8n, Make, Zapier:** run the Actor from your workflow, then filter on `ecommercePlatform`, `bnplProviders`, or `country`.
- **AI agents (MCP):** connect `https://mcp.apify.com/?actors=pharaoh_data/gulf-store-tech-stack-detector` so an agent can profile stores on request.

### How detection works

- **Technical markers only.** A technology is reported when the page loads its script or assets, exposes its JavaScript global or web components, or sends its header or cookie: for example `cdn.salla.network`, `checkout.tabby.ai`, `cdn.tamara.co`, `powered-by: Shopify`. A page that only mentions "Tabby" or "Shopify" in text does not match.
- **Evidence and confidence for every result.** `high` means a platform-specific host, global, header, or cookie. `medium` means a documented naming convention (WooCommerce, Magento, Zid's media CDN). Set **Include detection evidence** to see the matched marker.
- **Country** comes from the Salla store country, country-code domains, published Saudi CR/VAT numbers and trust badges, UAE TRNs, phone dialing codes, currencies, and place names. If signals are weak or point to several countries, `country` stays empty and `countrySignals` shows why.
- **Pages read:** the homepage after redirects, plus one linked contact or about page if you allow it. At most two requests per site.

### Privacy, compliance, and limits

- **Business data only.** Emails are kept only for role mailboxes (info@, sales@, care@, and similar). Phones are kept only when they are unified (9200…), toll-free (800…), shared-cost, or landline numbers. Mobile numbers, personal names, freelancer IDs, and personal social profiles are never returned. WhatsApp is reported only as present or absent.
- **robots.txt is always respected,** including after redirects. Each site gets at most one request per second, slower if robots.txt asks. No proxies, logins, or CAPTCHA solving are used. Sites that block automated visitors are reported as `failed` with the reason.
- **What it cannot see:** technologies that load only after user interaction or only at checkout, and content rendered entirely in the browser. Single-page apps may show fewer technologies. Payment methods for non-Salla stores are detected only when their scripts are on the homepage or contact page.
- **Zid** is detected from its media CDN (`media.zid.store`), confirmed on Zid's own marketplace, so its confidence is `medium`.
- Use results in line with the analyzed sites' terms and applicable rules (Saudi PDPL, UAE PDPL, and GDPR). Business identifiers are those the companies publish on their own websites.

### Pricing

Pay per event: you pay per **analyzed website** (one `ok` record), plus Apify's small Actor start event. Failed, blocked, and invalid websites are free. See the **Pricing** tab for current amounts. A list of 12 websites finishes in about 20 seconds.

### FAQ

**Does it find stores for me?**
No, it analyzes the websites you provide. Good sources are your CRM, marketplace seller lists, Salla or Zid showcase pages, and Google results you have permission to use.

**Why is a field empty?**
The site didn't publish it on the homepage or contact page, or blocked automated visits (see `status` and `error`).

**Can I monitor changes, such as a store adding Tabby?**
Run it on a schedule and compare `bnplProviders` between runs. Built-in change tracking is planned.

**Is Arabic supported?**
Yes. Arabic pages, Arabic-Indic digits in VAT and CR numbers, and Arabic delivery-partner names are handled.

# Actor input Schema

## `websites` (type: `array`):

Domains or URLs, one per line, such as aldakheeloud.com or https://www.example.sa. Up to 1,000 per run; duplicates are skipped. Only analyze sites whose terms permit it; robots.txt is always respected.

## `includeContactPage` (type: `boolean`):

Read one linked contact or about page per site to find more business contacts, CR/VAT numbers, and trust badges. Adds one request per site.

## `includeEvidence` (type: `boolean`):

Add the matched marker (for example the script host or header) to each detected technology, so you can verify every result.

## `maxConcurrency` (type: `integer`):

How many different websites to analyze at once (1–10). Requests to the same site are always spaced at least 1 second apart.

## Actor input object example

```json
{
  "websites": [
    "aldakheeloud.com",
    "niceonesa.com",
    "mumzworld.com",
    "jarir.com"
  ],
  "includeContactPage": true,
  "includeEvidence": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `profiles` (type: `string`):

One record per website with platform, payments, BNPL, pixels, technologies, country, contacts, and identifiers.

## `runSummary` (type: `string`):

Counts of platforms, BNPL providers, payment methods, countries, and technologies across all websites.

# 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 = {
    "websites": [
        "aldakheeloud.com",
        "niceonesa.com",
        "mumzworld.com",
        "jarir.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pharaoh_data/gulf-store-tech-stack-detector").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 = { "websites": [
        "aldakheeloud.com",
        "niceonesa.com",
        "mumzworld.com",
        "jarir.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pharaoh_data/gulf-store-tech-stack-detector").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 '{
  "websites": [
    "aldakheeloud.com",
    "niceonesa.com",
    "mumzworld.com",
    "jarir.com"
  ]
}' |
apify call pharaoh_data/gulf-store-tech-stack-detector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pharaoh_data/gulf-store-tech-stack-detector"
        }
    }
}
```

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/BGN7CqvKxkpRvfo3f/builds/V4HwlNzcSdh9P1kzV/openapi.json
