# Atlassian Marketplace Scraper (`b2b_lead_generation/atlassian-marketplace-scraper`) Actor

Extract Jira and Confluence app details, ratings, reviews, and install stats from Atlassian Marketplace. Easily search tools or look up specific add-ons, then download structured dataset results in JSON, CSV, or Excel formats.

- **URL**: https://apify.com/b2b_lead_generation/atlassian-marketplace-scraper.md
- **Developed by:** [B2B Lead Generation](https://apify.com/b2b_lead_generation) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Atlassian Marketplace Scraper: Jira and Confluence Apps Search

Extract app details, ratings, vendor names, and install metrics for Jira, Confluence, and other Atlassian Marketplace apps. Search across the catalog or load targeted app keys, then export your data straight to JSON, CSV, or Excel.

### Use Cases

- **Plugin Audit**: Search "time tracking" to build a clean catalog of active Jira apps, vendors, and review stats.
- **Confluence Shortlist**: Filter by product to review available add-ons and taglines for team collaboration tools.
- **App Benchmarking**: Pass specific app keys to inspect installation numbers, total downloads, and user feedback over time.
- **Spreadsheet Analysis**: Cap your run limit and export directly into CSV or Excel for team reporting.

### What Data Does This Scraper Extract?

This tool operates in two flexible modes depending on your workflow:

- **Search Mode**: Finds apps based on your query, product filters, hosting environment, and price tiers. It automatically paginates through search results to ensure complete datasets.
- **App Details Mode**: Extracts rich metadata for specific app keys, including install metrics, ratings, vendor info, and detailed category tags.

#### Extracted Fields

- **Key**: Unique identifier for the app.
- **Name & Tagline**: Full app title and high-level descriptive tagline.
- **Summary**: Concise overview of the app's functionality.
- **Vendor Name**: Developer or company behind the app.
- **Categories**: Associated feature tags (e.g., Time tracking, Project management).
- **Downloads & Total Installs**: Active usage and download statistics.
- **Rating**: Average rating score and total review count.
- **URL**: Direct link to the app page.

### Input Configuration

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | Choose between `search` or `app_details`. |
| `query` | string | `time tracking` | Text query used when running in search mode. |
| `application` | string | empty | Filter by product (e.g., `jira`, `confluence`). |
| `hosting` | string | empty | Filter by hosting type: `cloud`, `datacenter`, or `server`. |
| `cost` | string | empty | Filter by price model: `free`, `paid`, or `marketplace`. |
| `addonKeys` | array | `["com.soldevelo.apps.worklogs"]` | Array of specific app keys for details mode. |
| `maxItems` | integer | `100` | Maximum number of app entries to extract (1 to 1000). |
| `requestDelaySecs` | number | `1` | Delay in seconds between requests. |
| `timeoutSecs` | integer | `300` | Maximum total execution time in seconds. |

#### Input Examples

**Search Mode:**

```json
{
  "mode": "search",
  "query": "time tracking",
  "application": "jira",
  "hosting": "cloud",
  "maxItems": 100,
  "requestDelaySecs": 1
}

```

**App Details Mode:**

```json
{
  "mode": "app_details",
  "addonKeys": ["com.soldevelo.apps.worklogs"],
  "maxItems": 100
}

```

### Output Example

```json
{
  "key": "com.soldevelo.apps.worklogs",
  "name": "Worklogs - Time Tracking, Time Reports, Timesheets",
  "tagLine": "Time reports and time tracking for members of your team done in an easy and flexible way.",
  "summary": "This plugin will allow you to keep track of the time spent by your team members.",
  "vendor_name": "SolDevelo",
  "categories": ["Project management", "Time tracking"],
  "downloads": 24978,
  "totalInstalls": 5339,
  "rating_avg": 4.51,
  "rating_count": 104,
  "url": "https://marketplace.atlassian.com/apps/1219004/worklogs-time-tracking-time-reports-timesheets?tab=overview",
  "scraped_at": "2026-10-12T00:00:00+00:00"
}

```

### FAQ

**Can I export the extracted data to Excel or CSV?**
Yes. Once the run finishes, you can download your dataset directly in JSON, CSV, or Excel formats.

**How many apps can I scrape in a single run?**
You can set `maxItems` up to 1,000 apps per run.

**How does deduplication work?**
The scraper automatically deduplicates items by their app key during the run, so you won't get duplicate rows in your dataset.

### Trademark Notice

Atlassian Marketplace and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

### Disclaimer

This scraper is an independent tool and is not affiliated with, endorsed by, or sponsored by Atlassian or its affiliates. All data is gathered from publicly accessible web pages. Users are responsible for complying with relevant site terms and applicable local regulations.

### Is Web Scraping Legal?

This tool collects publicly available information from Atlassian Marketplace without bypassing access controls. Scraping public data is generally legal, but how you use the data matters:

- **Personal Data:** Respect privacy regulations like GDPR or CCPA if personal details appear in public listings or reviews.
- **Copyright:** Respect original content ownership when reusing app descriptions or vendor information.
- **Terms of Service:** Review target site policies regarding general data extraction and automated request limits.

This is not legal advice. To learn more, read Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Actor input Schema

## `mode` (type: `string`):

search calls GET /rest/2/addons with text, application, hosting, and cost. app_details calls GET /rest/2/addons/{addonKey} for each key.

## `query` (type: `string`):

Search text sent as the text parameter on /rest/2/addons. Example: time tracking. Ignored in app_details.

## `application` (type: `string`):

Product filter on search. Examples: jira, confluence, bitbucket. Leave blank to skip the parameter.

## `hosting` (type: `string`):

Hosting filter on search: cloud, datacenter, or server. Leave blank to skip the parameter.

## `cost` (type: `string`):

Price filter on search. free, paid, and marketplace were not rechecked against a live response. Leave blank to skip the parameter.

## `addonKeys` (type: `array`):

Addon keys for app_details, one per line. Example: com.soldevelo.apps.worklogs. Ignored in search.

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

Maximum app rows to save this run. Hard cap is 1000. Error rows do not count toward this limit.

## `requestDelaySecs` (type: `number`):

Seconds to wait before each Marketplace request. A short burst returned 2xx with no rate-limit headers, and the actor still waits.

## `userAgent` (type: `string`):

User-Agent sent on every request. App details returned HTTP 410 for a bot-style agent during checks, so keep a browser-style value.

## `timeoutSecs` (type: `integer`):

Stop the run after this many seconds and keep rows already collected. Default 300. Maximum 3600.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for one Marketplace response before treating that call as failed. Default 30 seconds.

## `proxyConfiguration` (type: `object`):

Optional proxy for Marketplace requests. Leave useApifyProxy off. The public addon endpoints do not need a proxy.

## Actor input object example

```json
{
  "mode": "search",
  "query": "time tracking",
  "application": "",
  "hosting": "",
  "cost": "",
  "addonKeys": [
    "com.soldevelo.apps.worklogs"
  ],
  "maxItems": 100,
  "requestDelaySecs": 1,
  "userAgent": "",
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Addon key, name, tag line, summary, vendor, categories, downloads, installs, and source URL.

## `errors` (type: `string`):

Failed requests with URL, HTTP status, and message.

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

Every row from the run, without a table view applied.

# 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 = {
    "query": "time tracking",
    "addonKeys": [
        "com.soldevelo.apps.worklogs"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_lead_generation/atlassian-marketplace-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 = {
    "query": "time tracking",
    "addonKeys": ["com.soldevelo.apps.worklogs"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_lead_generation/atlassian-marketplace-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 '{
  "query": "time tracking",
  "addonKeys": [
    "com.soldevelo.apps.worklogs"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call b2b_lead_generation/atlassian-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_lead_generation/atlassian-marketplace-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/tybjrlI3DwoF1dEzl/builds/uvl2Rzass3Golh2sz/openapi.json
