# Portland Leather Goods Scraper

Scrape Portland Leather Goods and extract data on clothing accessories from portlandleathergoods.com. Our Portland Leather Goods API lets you crawl product information and pricing. The saved data can be downloaded as HTML, JSON, CSV, Excel, and XML.

## Actor Statistics

- Total users: 3
- Monthly users: 3
- Runs succeeded: 100.00%
- Categories: E-commerce, Open source

## Pricing

Pay per usage

## Input Schema

- **maxRequestsPerCrawl** (type: integer): How many items to extract from portlandleathergoods.com
- **extendOutputFunction** (type: string): Add or remove properties on the output object or omit the output returning null
- **extendScraperFunction** (type: string): Advanced function that allows you to extend the default scraper functionality, allowing you to manually perform actions on the page
- **customData** (type: object): Any data that you want to have available inside the Extend Output/Scraper Function
- **fetchHtml** (type: boolean): If you decide to fetch the HTML of the pages, it will take twice as long. Make sure to only enable this if needed
- **maxConcurrency** (type: integer): Max concurrency to use
- **maxRequestRetries** (type: integer): Set the max request retries
- **debugLog** (type: boolean): Enable a more verbose logging to be able to understand what's happening during the scraping

## API example

## Portland Leather Goods Scraper

- **OpenAPI Version:** `3.1.1`
- **API Version:** `0.0`

Scrape Portland Leather Goods and extract data on clothing accessories from portlandleathergoods.com. Our Portland Leather Goods API lets you crawl product information and pricing. The saved data can be downloaded as HTML, JSON, CSV, Excel, and XML.

### Servers

- **URL:** `https://api.apify.com/v2`

### Operations

#### Executes an Actor, waits for its completion, and returns Actor's dataset items in response.

- **Method:** `POST`
- **Path:** `/acts/mshopik~portland-leather-goods-scraper/run-sync-get-dataset-items`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`customData`**

  `object`, default: `{}` — Any data that you want to have available inside the Extend Output/Scraper Function

- **`debugLog`**

  `boolean`, default: `false` — Enable a more verbose logging to be able to understand what's happening during the scraping

- **`extendOutputFunction`**

  `string`, default: `"async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n return item;\n}"` — Add or remove properties on the output object or omit the output returning null

- **`extendScraperFunction`**

  `string`, default: `"async ({ fns, customData, Apify, label }) => {\n \n}"` — Advanced function that allows you to extend the default scraper functionality, allowing you to manually perform actions on the page

- **`fetchHtml`**

  `boolean`, default: `true` — If you decide to fetch the HTML of the pages, it will take twice as long. Make sure to only enable this if needed

- **`maxConcurrency`**

  `integer`, default: `20` — Max concurrency to use

- **`maxRequestRetries`**

  `integer`, default: `3` — Set the max request retries

- **`maxRequestsPerCrawl`**

  `integer`, default: `20` — How many items to extract from portlandleathergoods.com

**Example:**

```
{
  "maxRequestsPerCrawl": 20,
  "extendOutputFunction": "async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n  return item;\n}",
  "extendScraperFunction": "async ({ fns, customData, Apify, label }) => {\n \n}",
  "customData": {},
  "fetchHtml": true,
  "maxConcurrency": 20,
  "maxRequestRetries": 3,
  "debugLog": false
}
```

##### Responses

###### Status: 200 OK

#### Executes an Actor and returns information about the initiated run in response.

- **Method:** `POST`
- **Path:** `/acts/mshopik~portland-leather-goods-scraper/runs`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`customData`**

  `object`, default: `{}` — Any data that you want to have available inside the Extend Output/Scraper Function

- **`debugLog`**

  `boolean`, default: `false` — Enable a more verbose logging to be able to understand what's happening during the scraping

- **`extendOutputFunction`**

  `string`, default: `"async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n return item;\n}"` — Add or remove properties on the output object or omit the output returning null

- **`extendScraperFunction`**

  `string`, default: `"async ({ fns, customData, Apify, label }) => {\n \n}"` — Advanced function that allows you to extend the default scraper functionality, allowing you to manually perform actions on the page

- **`fetchHtml`**

  `boolean`, default: `true` — If you decide to fetch the HTML of the pages, it will take twice as long. Make sure to only enable this if needed

- **`maxConcurrency`**

  `integer`, default: `20` — Max concurrency to use

- **`maxRequestRetries`**

  `integer`, default: `3` — Set the max request retries

- **`maxRequestsPerCrawl`**

  `integer`, default: `20` — How many items to extract from portlandleathergoods.com

**Example:**

```
{
  "maxRequestsPerCrawl": 20,
  "extendOutputFunction": "async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n  return item;\n}",
  "extendScraperFunction": "async ({ fns, customData, Apify, label }) => {\n \n}",
  "customData": {},
  "fetchHtml": true,
  "maxConcurrency": 20,
  "maxRequestRetries": 3,
  "debugLog": false
}
```

##### Responses

###### Status: 200 OK

\####### Content-Type: application/json

- **`data`**

  `object`

  - **`actId`**

    `string`

  - **`buildId`**

    `string`

  - **`buildNumber`**

    `string`

  - **`containerUrl`**

    `string`

  - **`defaultDatasetId`**

    `string`

  - **`defaultKeyValueStoreId`**

    `string`

  - **`defaultRequestQueueId`**

    `string`

  - **`finishedAt`**

    `string`, format: `date-time`

  - **`id`**

    `string`

  - **`meta`**

    `object`

    - **`origin`**

      `string`

    - **`userAgent`**

      `string`

  - **`options`**

    `object`

    - **`build`**

      `string`

    - **`diskMbytes`**

      `integer`

    - **`memoryMbytes`**

      `integer`

    - **`timeoutSecs`**

      `integer`

  - **`startedAt`**

    `string`, format: `date-time`

  - **`stats`**

    `object`

    - **`computeUnits`**

      `integer`

    - **`inputBodyLen`**

      `integer`

    - **`rebootCount`**

      `integer`

    - **`restartCount`**

      `integer`

    - **`resurrectCount`**

      `integer`

  - **`status`**

    `string`

  - **`usage`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `integer`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`usageTotalUsd`**

    `number`

  - **`usageUsd`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `number`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`userId`**

    `string`

**Example:**

```
{
  "data": {
    "id": "",
    "actId": "",
    "userId": "",
    "startedAt": "2025-01-08T00:00:00.000Z",
    "finishedAt": "2025-01-08T00:00:00.000Z",
    "status": "READY",
    "meta": {
      "origin": "API",
      "userAgent": ""
    },
    "stats": {
      "inputBodyLen": 2000,
      "rebootCount": 0,
      "restartCount": 0,
      "resurrectCount": 0,
      "computeUnits": 0
    },
    "options": {
      "build": "latest",
      "timeoutSecs": 300,
      "memoryMbytes": 1024,
      "diskMbytes": 2048
    },
    "buildId": "",
    "defaultKeyValueStoreId": "",
    "defaultDatasetId": "",
    "defaultRequestQueueId": "",
    "buildNumber": "1.0.0",
    "containerUrl": "",
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 1,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    },
    "usageTotalUsd": 0.00005,
    "usageUsd": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 0.00005,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    }
  }
}
```

#### Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.

- **Method:** `POST`
- **Path:** `/acts/mshopik~portland-leather-goods-scraper/run-sync`
- **Tags:** Run Actor

##### Request Body

###### Content-Type: application/json

- **`customData`**

  `object`, default: `{}` — Any data that you want to have available inside the Extend Output/Scraper Function

- **`debugLog`**

  `boolean`, default: `false` — Enable a more verbose logging to be able to understand what's happening during the scraping

- **`extendOutputFunction`**

  `string`, default: `"async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n return item;\n}"` — Add or remove properties on the output object or omit the output returning null

- **`extendScraperFunction`**

  `string`, default: `"async ({ fns, customData, Apify, label }) => {\n \n}"` — Advanced function that allows you to extend the default scraper functionality, allowing you to manually perform actions on the page

- **`fetchHtml`**

  `boolean`, default: `true` — If you decide to fetch the HTML of the pages, it will take twice as long. Make sure to only enable this if needed

- **`maxConcurrency`**

  `integer`, default: `20` — Max concurrency to use

- **`maxRequestRetries`**

  `integer`, default: `3` — Set the max request retries

- **`maxRequestsPerCrawl`**

  `integer`, default: `20` — How many items to extract from portlandleathergoods.com

**Example:**

```
{
  "maxRequestsPerCrawl": 20,
  "extendOutputFunction": "async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n  return item;\n}",
  "extendScraperFunction": "async ({ fns, customData, Apify, label }) => {\n \n}",
  "customData": {},
  "fetchHtml": true,
  "maxConcurrency": 20,
  "maxRequestRetries": 3,
  "debugLog": false
}
```

##### Responses

###### Status: 200 OK

### Schemas

#### inputSchema

- **Type:**`object`

* **`customData`**

  `object`, default: `{}` — Any data that you want to have available inside the Extend Output/Scraper Function

* **`debugLog`**

  `boolean`, default: `false` — Enable a more verbose logging to be able to understand what's happening during the scraping

* **`extendOutputFunction`**

  `string`, default: `"async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n return item;\n}"` — Add or remove properties on the output object or omit the output returning null

* **`extendScraperFunction`**

  `string`, default: `"async ({ fns, customData, Apify, label }) => {\n \n}"` — Advanced function that allows you to extend the default scraper functionality, allowing you to manually perform actions on the page

* **`fetchHtml`**

  `boolean`, default: `true` — If you decide to fetch the HTML of the pages, it will take twice as long. Make sure to only enable this if needed

* **`maxConcurrency`**

  `integer`, default: `20` — Max concurrency to use

* **`maxRequestRetries`**

  `integer`, default: `3` — Set the max request retries

* **`maxRequestsPerCrawl`**

  `integer`, default: `20` — How many items to extract from portlandleathergoods.com

**Example:**

```
{
  "maxRequestsPerCrawl": 20,
  "extendOutputFunction": "async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\n  return item;\n}",
  "extendScraperFunction": "async ({ fns, customData, Apify, label }) => {\n \n}",
  "customData": {},
  "fetchHtml": true,
  "maxConcurrency": 20,
  "maxRequestRetries": 3,
  "debugLog": false
}
```

#### runsResponseSchema

- **Type:**`object`

* **`data`**

  `object`

  - **`actId`**

    `string`

  - **`buildId`**

    `string`

  - **`buildNumber`**

    `string`

  - **`containerUrl`**

    `string`

  - **`defaultDatasetId`**

    `string`

  - **`defaultKeyValueStoreId`**

    `string`

  - **`defaultRequestQueueId`**

    `string`

  - **`finishedAt`**

    `string`, format: `date-time`

  - **`id`**

    `string`

  - **`meta`**

    `object`

    - **`origin`**

      `string`

    - **`userAgent`**

      `string`

  - **`options`**

    `object`

    - **`build`**

      `string`

    - **`diskMbytes`**

      `integer`

    - **`memoryMbytes`**

      `integer`

    - **`timeoutSecs`**

      `integer`

  - **`startedAt`**

    `string`, format: `date-time`

  - **`stats`**

    `object`

    - **`computeUnits`**

      `integer`

    - **`inputBodyLen`**

      `integer`

    - **`rebootCount`**

      `integer`

    - **`restartCount`**

      `integer`

    - **`resurrectCount`**

      `integer`

  - **`status`**

    `string`

  - **`usage`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `integer`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`usageTotalUsd`**

    `number`

  - **`usageUsd`**

    `object`

    - **`ACTOR_COMPUTE_UNITS`**

      `integer`

    - **`DATA_TRANSFER_EXTERNAL_GBYTES`**

      `integer`

    - **`DATA_TRANSFER_INTERNAL_GBYTES`**

      `integer`

    - **`DATASET_READS`**

      `integer`

    - **`DATASET_WRITES`**

      `integer`

    - **`KEY_VALUE_STORE_LISTS`**

      `integer`

    - **`KEY_VALUE_STORE_READS`**

      `integer`

    - **`KEY_VALUE_STORE_WRITES`**

      `number`

    - **`PROXY_RESIDENTIAL_TRANSFER_GBYTES`**

      `integer`

    - **`PROXY_SERPS`**

      `integer`

    - **`REQUEST_QUEUE_READS`**

      `integer`

    - **`REQUEST_QUEUE_WRITES`**

      `integer`

  - **`userId`**

    `string`

**Example:**

```
{
  "data": {
    "id": "",
    "actId": "",
    "userId": "",
    "startedAt": "2025-01-08T00:00:00.000Z",
    "finishedAt": "2025-01-08T00:00:00.000Z",
    "status": "READY",
    "meta": {
      "origin": "API",
      "userAgent": ""
    },
    "stats": {
      "inputBodyLen": 2000,
      "rebootCount": 0,
      "restartCount": 0,
      "resurrectCount": 0,
      "computeUnits": 0
    },
    "options": {
      "build": "latest",
      "timeoutSecs": 300,
      "memoryMbytes": 1024,
      "diskMbytes": 2048
    },
    "buildId": "",
    "defaultKeyValueStoreId": "",
    "defaultDatasetId": "",
    "defaultRequestQueueId": "",
    "buildNumber": "1.0.0",
    "containerUrl": "",
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 1,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    },
    "usageTotalUsd": 0.00005,
    "usageUsd": {
      "ACTOR_COMPUTE_UNITS": 0,
      "DATASET_READS": 0,
      "DATASET_WRITES": 0,
      "KEY_VALUE_STORE_READS": 0,
      "KEY_VALUE_STORE_WRITES": 0.00005,
      "KEY_VALUE_STORE_LISTS": 0,
      "REQUEST_QUEUE_READS": 0,
      "REQUEST_QUEUE_WRITES": 0,
      "DATA_TRANSFER_INTERNAL_GBYTES": 0,
      "DATA_TRANSFER_EXTERNAL_GBYTES": 0,
      "PROXY_RESIDENTIAL_TRANSFER_GBYTES": 0,
      "PROXY_SERPS": 0
    }
  }
}
```

## 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 = {
    "maxRequestsPerCrawl": 20,
    "extendOutputFunction": async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {
      return item;
    },
    "extendScraperFunction": async ({ fns, customData, Apify, label }) => {
     
    },
    "customData": {},
    "maxConcurrency": 20,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("mshopik/portland-leather-goods-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 = {
    "maxRequestsPerCrawl": 20,
    "extendOutputFunction": """async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {
  return item;
}""",
    "extendScraperFunction": """async ({ fns, customData, Apify, label }) => {
 
}""",
    "customData": {},
    "maxConcurrency": 20,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("mshopik/portland-leather-goods-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxRequestsPerCrawl": 20,
  "extendOutputFunction": "async ({ data, item, product, images, fns, name, request, variants, context, customData, input, Apify }) => {\\n  return item;\\n}",
  "extendScraperFunction": "async ({ fns, customData, Apify, label }) => {\\n \\n}",
  "customData": {},
  "maxConcurrency": 20,
  "maxRequestRetries": 3
}' |
apify call mshopik/portland-leather-goods-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?actors=mshopik/portland-leather-goods-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

### What does Portland Leather Goods Scraper do?

This scraper creates an API for Portland Leather Goods to enable you to extract product information and pricing from the [portlandleathergoods.com](https://portlandleathergoods.com) online store.

The Portland Leather Goods API is free to use and will let you scrape and extract e-commerce data as often as you need to. The data you extract can be downloaded in structured format so that you can use it in your own applications, spreadsheets, reports, or tools.

Scraping Portland Leather Goods could help you identify competition, opportunities, potential leads, and useful contacts. The right data can help you with product tracking, market research, and price monitoring in the clothing accessories category.

If you need more inspiration, check out [how scraping can help you](https://apify.com/industries/ecommerce-and-retail) get an edge over the competition and stay ahead in e-commerce.

### How much will it cost to scrape Portland Leather Goods?

Running Portland Leather Goods Scraper will consume platform credits. Platform credits are counted in USD and each plan includes a set amount. Check our [platform pricing](https://apify.com/pricing/actors) page for details.

The exact number of platform credits consumed will depend on the actor input settings, the type of job it performs, how often it runs, and for how long.

The best way to find out how many platform credits an actor will consume is to perform a test run. You can then review platform usage in [Billing](https://console.apify.com/billing) and figure out the best Apify subscription plan for your needs.

### How to scrape Portland Leather Goods

[portlandleathergoods.com](https://portlandleathergoods.com) is built using Shopify and Portland Leather Goods Scraper is one of our huge range of online e-commerce scrapers designed to create a universal Shopify API.

Check out our [quick start guide](https://docs.apify.com/tutorials/quick-start) to using any Apify scraper or feel free to send an email to <support@apify.com> if you have any questions.

You can also watch our [video about scraping Amazon](https://www.youtube.com/watch?v=BsidLZKdYWQ) to understand more about scraping e-commerce data and how it can help your business succeed.

For more ideas, read about our [top 5 web scraping tools to help you gather retail analytics](https://blog.apify.com/top-5-web-scraping-tools-gather-retail-analytics/).
