# Portland Leather Goods Scraper (`mshopik/portland-leather-goods-scraper`) Actor

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.

- **URL**: https://apify.com/mshopik/portland-leather-goods-scraper.md
- **Developed by:** [Mark Carter](https://apify.com/mshopik) (community)
- **Categories:** E-commerce, Open source
- **Stats:** 6 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 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/).

# Actor 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

## Actor input object example

```json
{
  "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
}
```

# 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 = {
    "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/?tools=mshopik/portland-leather-goods-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/aO59GPAsp4wcnwvXQ/builds/JcBp9iFdTKHLMpzTu/openapi.json
