# Palmstreet Scraper - Products, Prices & Sellers (`lofomachines/palmstreet-scraper`) Actor

Scrape Palmstreet listings by keyword, marketplace URL or seller handle: full product detail, variants, prices, stock, shipping and seller profiles.

- **URL**: https://apify.com/lofomachines/palmstreet-scraper.md
- **Developed by:** [Lofomachines](https://apify.com/lofomachines) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/platform/actors/running/actors-in-store#pay-per-event

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

## Palmstreet Scraper – Products, Prices & Sellers

**Search Palmstreet by keyword, paste any marketplace or seller address, and get every listing as a clean row: full price and stock detail, all variants, shipping, and the complete seller profile.**

Palmstreet is a live-shopping marketplace for rare plants, pottery, crystals, trading cards, reptiles and collectibles — and browsing it by hand tells you almost nothing about the market. This Actor turns it into a spreadsheet you can sort, filter and price against.

No login. No API key. No cookies. **84 fields per listing, 1,000 listings in about 12 seconds.**

***

### What this Actor does

Give it keywords, marketplace addresses or seller handles and it returns, for every listing:

- **Full pricing** — current price, cheapest and most expensive variant, currency, buy-now-pay-later providers
- **Every variant** — price, stock quantity, SKU, options, availability, auction status
- **Stock and demand** — units available per variant and in total, purchase limits
- **Shipping** — fee, free-shipping flag, methods, combined shipping, heat pack, weight, and the city, region, country and ZIP it ships from
- **All media** — every image and video, with dimensions
- **Option matrices** — colour, size and other option groups with their full value lists
- **The complete seller profile** — handle, bio, rating, followers, verification, pro status, badges, vacation state, business-seller flag, join date
- **Listing lifecycle** — created, updated and pinned timestamps, review state, visibility, archived flag

Leave the input empty and it walks the whole marketplace.

***

### Who it is for

| Role | What they get |
| --- | --- |
| **Plant & collectible sellers** | What comparable items actually list for, and how much stock rivals hold |
| **Resellers & flippers** | Underpriced listings, price spreads by category, and who ships from where |
| **Buyers & collectors** | The full catalogue sorted by price instead of scrolling a feed |
| **Market analysts** | Category pricing, stock depth and seller concentration across the marketplace |
| **Brand & sourcing teams** | Which sellers are verified, active, pro, and how large their catalogues are |
| **Price monitoring** | A scheduled, dated snapshot of any keyword or seller |

***

### Use cases

**1. Price a listing before you post it**
Search your exact plant or item. You immediately see the real range, the median, and what the cheapest and most expensive sellers charge — including their shipping.

**2. Find underpriced listings**
Sort by price low to high inside a category. Anything well under the range is worth a closer look.

**3. Track a specific seller**
Paste `https://palmstreet.app/u/SellerName` and get their profile plus the listings the site publishes for them.

**4. Compare a whole category**
Filter to rare plants, pottery, crystals or trading cards and export the entire category with prices and stock.

**5. Monitor prices on a schedule**
Run the same keywords weekly. Every row is timestamped, so you build your own price history.

**6. Find sellers worth working with**
Filter on verified, pro, active and rating to shortlist serious sellers, then read their bio and follower count.

**7. Watch stock depth**
`totalQuantity` and per-variant quantities show who is holding real inventory and who has one unit left.

**8. Study shipping economics**
Compare shipping fees, free-shipping offers and dispatch locations across sellers in the same category.

***

### Input

Only what you actually need — everything technical is handled for you.

| Field | Description |
| --- | --- |
| **Search keywords** | What to search for, one per line. Leave everything empty to cover the whole marketplace. |
| **Palmstreet URLs** | A seller page such as `https://palmstreet.app/u/Koryn`, or a search such as `https://palmstreet.app/products?q=pothos` |
| **Seller handles** | Seller names to look up directly, without pasting a full address. |
| **Maximum listings per input** | Cap the records returned for each keyword, address or seller. |
| **Categories to include** | Leave empty for everything, or focus on rare plants, pottery, crystals, trading cards and more. |
| **Sort results by** | Relevance, newest, oldest, price low to high, or price high to low. |
| **Include sold-out listings** | Off by default, so only available listings are returned. |
| **Fetch extra listing details** | Off by default. Adds tags and option matrices, at one extra request per listing. |

```json
{
  "searchTerms": ["monstera", "philodendron"],
  "startUrls": ["https://palmstreet.app/u/Koryn"],
  "maxItems": 200,
  "categories": ["rare_plants_v2"],
  "sortBy": "price_low",
  "includeSoldOut": false,
  "includeFullDetails": false
}
```

***

### Output

One clean row per listing. Abridged below — the real row carries **84 fields**.

```json
{
  "productGroupId": "h0bT9ImbCCyQ6SArEkAjr",
  "title": "Monsteras + Mosh Pits Keychain",
  "description": "Enamel keychain, 2 inches.",

  "priceAmount": 5,
  "priceCurrency": "USD",
  "priceMin": 5,
  "priceMax": 5,
  "saleType": "normal",
  "availability": "in_stock",
  "isSold": false,
  "purchaseLimit": null,
  "giftEnabled": true,
  "instalmentOptions": [
    { "provider": "Affirm", "installments": 4 },
    { "provider": "Klarna", "installments": 4 },
    { "provider": "AfterPay", "installments": 4 }
  ],

  "variantCount": 2,
  "totalQuantity": 94,
  "hasAuction": false,

  "shippingFeeAmount": 8,
  "isFreeShipping": false,
  "shipmentMethods": ["standard"],
  "includesHeatPack": false,
  "shipsFromCity": "Boise",
  "shipsFromRegion": "ID",
  "shipsFromCountry": "US",
  "localPickupAvailable": false,

  "imageCount": 6,
  "primaryImageUrl": "https://api.plantstory.app/imaginary/resize?...",

  "variants": [
    {
      "variantId": "VcoAwZHPIl2sg6gwm1iYQ",
      "title": "Monsteras + Mosh Pits Keychain",
      "priceAmount": 5,
      "quantity": 47,
      "sku": null,
      "availability": "in_stock",
      "options": [{ "product_option_id": "ZuC...", "product_option_value_id": "5ZL..." }],
      "auction": null
    }
  ],
  "productOptions": [
    {
      "name": "Color",
      "values": [{ "value": "Black Background w/ White Letters" }]
    }
  ],

  "sellerName": "MullinixCollective",
  "sellerUrl": "https://palmstreet.app/u/MullinixCollective",
  "sellerRating": 5,
  "sellerFollowers": 0,
  "sellerIsVerified": true,
  "sellerVerificationType": "Email Verified",
  "sellerIsPro": false,
  "sellerIsActive": true,
  "sellerOnVacation": false,
  "sellerJoinedAt": "2024-11-25T14:54:43.000Z",

  "listingCategory": "rare_plants_v2",
  "createdAt": "2026-02-28T18:15:23.148Z",
  "updatedAt": "2026-07-27T03:45:38.392Z",
  "searchTerm": "monstera",
  "detailLevel": "full",
  "scrapedAt": "2026-07-28T16:20:00.000Z"
}
```

All money is in **major units** (5 means $5.00, not 500 cents) and all timestamps are **ISO 8601**, so the dataset drops straight into a spreadsheet or database.

Export to **JSON, CSV, Excel, XML or HTML** in one click, or pull it from the API.

***

### Integrations & automation

- **Make (Integromat)** — run keywords weekly and append every listing to a pricing sheet
- **n8n** — alert when a listing appears under your target price
- **Zapier** — push new listings from a watched seller into Slack or Airtable
- **Google Sheets / Airtable** — build a live price-comparison table
- **API / webhooks** — call the Actor from your own stack and read the dataset endpoint
- **AI agents / MCP** — a documented output schema makes this easy to chain

**Popular workflow:** schedule your top ten keywords weekly, then diff `priceAmount` per `productGroupId` to build a real price history for the categories you trade in.

#### Performance

| Run | Listings | Time |
| --- | --- | --- |
| Default | 1,000 | ~12 s |
| With extra listing details | 1,000 | ~45 s |

Requests adapt to whatever rate the marketplace will sustain, so large runs stay fast without being throttled.

***

### FAQ

**Do I need a Palmstreet account?**
No. The Actor uses only publicly available marketplace data and needs no credentials.

**Can I scrape the entire marketplace?**
Yes. Leave the keywords, URLs and handles empty and raise **Maximum listings per input**.

**How do I scrape one seller?**
Paste their page address, or just their handle into **Seller handles**. You get the full profile plus the listings Palmstreet publishes on the web for them. Note that a seller's complete back catalogue is only shown inside the Palmstreet app, so very large sellers return the publicly listed subset — use keyword searches to reach more of their inventory.

**Are prices in cents?**
No. Prices are converted to major units, so `5` means $5.00. Every row also names its currency.

**Why are views and likes zero?**
Palmstreet does not publish engagement counters on the web. The fields are included for completeness and will populate if that ever changes — they are never invented.

**How fast is it?**
1,000 listings in about **12 seconds** on the default settings. Turning on **Fetch extra listing details** raises that to roughly 45 seconds for 1,000, because it reads each listing individually.

**Should I turn on extra listing details?**
Usually not. The standard pass already returns prices, every variant, stock, shipping, images and the complete seller profile. On a 1,000-listing test the extra pass changed only 33 rows — it adds `tags` and confirms option matrices. Leave it off unless you specifically need those.

**Can I filter by price?**
Sort by price and cap the results, or filter `priceAmount` after the run in your spreadsheet or automation — every row carries the numeric price.

***

### More tools by Lofomachines

- [Universal E-commerce Scraper](https://apify.com/lofomachines/universal-ecommerce-scraper) — the same treatment for any other store
- [Vinted Scraper API – Cheapest Cross-Country Listings & Sellers](https://apify.com/lofomachines/vinted-scraper-api) — resale marketplace listings and sellers
- [eBay Deals Scraper by Country](https://apify.com/lofomachines/ebay-deals-country-scraper) — cross-check pricing against eBay
- [Pokémon Card & Sealed Box Market Intelligence](https://apify.com/lofomachines/pokemon-card-box-market-intelligence) — collectible pricing intelligence
- [Website Contact Extractor](https://apify.com/lofomachines/website-contact-extractor) — turn seller sites into contactable leads

Browse everything at [apify.com/lofomachines](https://apify.com/lofomachines).

***

*Keywords: Palmstreet scraper, Palmstreet API, palmstreet.app products, rare plant marketplace data, plant price scraper, live shopping marketplace scraper, Palmstreet seller data, plant reseller pricing, collectibles marketplace scraper, pottery and crystals pricing, marketplace price monitoring, product variant scraper.*

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for on Palmstreet, one keyword per line. Leave empty to cover the whole marketplace.

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

Paste Palmstreet addresses: a seller page such as https://palmstreet.app/u/Koryn, or a search such as https://palmstreet.app/products?q=pothos

## `sellerUsernames` (type: `array`):

Seller names to look up directly, without pasting a full address.

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

Upper limit of listings returned for each keyword, address or seller.

## `categories` (type: `array`):

Leave empty for everything, or focus on specific parts of the marketplace.

## `sortBy` (type: `string`):

How the returned listings should be ordered.

## `includeSoldOut` (type: `boolean`):

Off by default, so only listings that are currently available are returned.

## `includeFullDetails` (type: `boolean`):

Off by default, because the fast pass already returns prices, variants, stock, shipping, images and the full seller profile. Turning this on adds tags, option matrices, gifting and instalment availability, but costs one extra request per listing.

## Actor input object example

```json
{
  "searchTerms": [
    "monstera"
  ],
  "startUrls": [],
  "sellerUsernames": [],
  "maxItems": 200,
  "categories": [],
  "sortBy": "relevance",
  "includeSoldOut": false,
  "includeFullDetails": false
}
```

# 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 = {
    "searchTerms": [
        "monstera",
        "philodendron"
    ],
    "startUrls": [],
    "sellerUsernames": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lofomachines/palmstreet-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 = {
    "searchTerms": [
        "monstera",
        "philodendron",
    ],
    "startUrls": [],
    "sellerUsernames": [],
}

# Run the Actor and wait for it to finish
run = client.actor("lofomachines/palmstreet-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 '{
  "searchTerms": [
    "monstera",
    "philodendron"
  ],
  "startUrls": [],
  "sellerUsernames": []
}' |
apify call lofomachines/palmstreet-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lofomachines/palmstreet-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/I8g7fsvYD4QQ7u6OM/builds/EEh6NHmYeYkfQSgn7/openapi.json
