{
  "data": {
    "id": "TRehfRTcsvFM1YSMo",
    "actId": "ceT4Bd8EBeouwgBYr",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-11T11:41:57.988Z",
    "finishedAt": "2026-11-11T11:42:02.661Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4605,
      "runTimeSecs": 4.605,
      "computeUnits": 0.005116666666666667,
      "imageSizeBytes": 319117312
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Apartment Therapy Scraper Input\",\n  \"description\": \"Get the newest Apartment Therapy articles, search by keyword across the live feed and public archive, or browse a home-and-design category.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Scraping Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape: getLatest (newest articles), searchArticles (keyword search across the live feed and archive), or browseCategory (browse a topic).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"getLatest\",\n        \"searchArticles\",\n        \"browseCategory\"\n      ],\n      \"enumTitles\": [\n        \"Get Latest Articles\",\n        \"Search Articles by Keyword\",\n        \"Browse by Category\"\n      ],\n      \"default\": \"getLatest\",\n      \"prefill\": \"getLatest\"\n    },\n    \"query\": {\n      \"title\": \"Search Query\",\n      \"type\": \"string\",\n      \"description\": \"Keyword(s) to search in titles, summaries, categories and tags. Used when mode=searchArticles.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"small apartment ideas\"\n    },\n    \"category\": {\n      \"title\": \"Category\",\n      \"type\": \"string\",\n      \"description\": \"Topic to browse. Used when mode=browseCategory; `main` means all topics.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"main\",\n        \"decorating\",\n        \"organizing\",\n        \"diy\",\n        \"shopping\",\n        \"small-spaces\",\n        \"kitchen\",\n        \"bathroom\",\n        \"bedroom\",\n        \"living-room\",\n        \"house-tours\",\n        \"before-and-after\",\n        \"home-projects\",\n        \"cleaning\",\n        \"plants\",\n        \"real-estate\",\n        \"money\",\n        \"life\",\n        \"tech\",\n        \"news\"\n      ],\n      \"enumTitles\": [\n        \"All Topics\",\n        \"Decorating\",\n        \"Organizing\",\n        \"DIY\",\n        \"Shopping\",\n        \"Small Spaces\",\n        \"Kitchen\",\n        \"Bathroom\",\n        \"Bedroom\",\n        \"Living Room\",\n        \"House Tours\",\n        \"Before & After\",\n        \"Home Projects\",\n        \"Cleaning\",\n        \"Plants & Yard\",\n        \"Real Estate\",\n        \"Money\",\n        \"Life\",\n        \"Tech\",\n        \"News\"\n      ],\n      \"default\": \"main\",\n      \"prefill\": \"main\"\n    },\n    \"authorFilter\": {\n      \"title\": \"Author Filter\",\n      \"type\": \"string\",\n      \"description\": \"Keep only articles whose author name contains this text (case-insensitive).\",\n      \"editor\": \"textfield\"\n    },\n    \"feed\": {\n      \"title\": \"Feed\",\n      \"type\": \"string\",\n      \"description\": \"Which Apartment Therapy feed to read: main (home & design), tech (home technology), or all.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"main\",\n        \"tech\",\n        \"all\"\n      ],\n      \"enumTitles\": [\n        \"Main feed\",\n        \"Tech feed\",\n        \"Both feeds\"\n      ],\n      \"default\": \"main\",\n      \"prefill\": \"main\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort Order\",\n      \"type\": \"string\",\n      \"description\": \"Result order. relevance suits keyword searches; newest and oldest sort by publish date.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevance\",\n        \"newest\",\n        \"oldest\"\n      ],\n      \"enumTitles\": [\n        \"Relevance\",\n        \"Newest first\",\n        \"Oldest first\"\n      ],\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\"\n    },\n    \"dateFrom\": {\n      \"title\": \"Published from\",\n      \"type\": \"string\",\n      \"description\": \"Optional earliest publish date, YYYY-MM-DD.\",\n      \"editor\": \"textfield\"\n    },\n    \"dateTo\": {\n      \"title\": \"Published to\",\n      \"type\": \"string\",\n      \"description\": \"Optional latest publish date, YYYY-MM-DD.\",\n      \"editor\": \"textfield\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max Items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of articles to return (1–200).\",\n      \"minimum\": 1,\n      \"maximum\": 200,\n      \"default\": 50,\n      \"prefill\": 3\n    },\n    \"maxPages\": {\n      \"title\": \"History Depth\",\n      \"type\": \"integer\",\n      \"description\": \"How many historical RSS snapshots to scan beyond the live feed. 1 = live feed only; 20 = deepest available history.\",\n      \"minimum\": 1,\n      \"maximum\": 20,\n      \"default\": 2,\n      \"prefill\": 1\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Apartment Therapy Article Scraper\n\nCollect **Apartment Therapy** articles about decorating, DIY, organizing, house tours, kitchen and bathroom makeovers, small-space living, shopping guides and home technology. Pull the newest posts, search by keyword across recent and historical content, or browse a topic. Every record is captured cookielessly — no login, API key or proxy setup.\n\n## Modes\n\n| Mode | What it returns |\n|---|---|\n| `getLatest` | Newest articles from the live feed, continuing into historical snapshots when `maxItems` is larger than the live feed |\n| `searchArticles` | Keyword matches from the live feed, historical snapshots and the public news index |\n| `browseCategory` | Articles carrying a selected topic tag, including historical snapshots |\n\n`feed` selects the main home-and-design feed, the tech feed, or both. `authorFilter`, `dateFrom` and `dateTo` narrow any mode. `maxPages` controls how deep the historical scan goes, and `maxItems` caps the result.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `getLatest` | `getLatest`, `searchArticles` or `browseCategory` |\n| `query` | string | – | Keywords for `searchArticles`; prefill is `small apartment ideas` |\n| `category` | select | `main` | Topic for `browseCategory` (see list below) |\n| `authorFilter` | string | – | Partial, case-insensitive author name |\n| `feed` | select | `main` | `main`, `tech` or `all` |\n| `sortBy` | select | `relevance` | `relevance`, `newest` or `oldest` |\n| `dateFrom` | string | – | Earliest publish date, `YYYY-MM-DD` |\n| `dateTo` | string | – | Latest publish date, `YYYY-MM-DD` |\n| `maxItems` | integer | `50` | Maximum records to return (1–200) |\n| `maxPages` | integer | `2` | Historical snapshots to scan (1–20; 1 = live feed only) |\n\nCategories: `main`, `decorating`, `organizing`, `diy`, `shopping`, `small-spaces`, `kitchen`, `bathroom`, `bedroom`, `living-room`, `house-tours`, `before-and-after`, `home-projects`, `cleaning`, `plants`, `real-estate`, `money`, `life`, `tech`, `news`.\n\n### Examples\n\nNewest articles:\n\n```json\n{\"mode\": \"getLatest\", \"maxItems\": 25}\n```\n\nKeyword search across the archive:\n\n```json\n{\"mode\": \"searchArticles\", \"query\": \"small kitchen storage\", \"maxItems\": 40, \"maxPages\": 6}\n```\n\nBrowse a topic with an author and date filter:\n\n```json\n{\"mode\": \"browseCategory\", \"category\": \"before-and-after\", \"authorFilter\": \"sarah\", \"dateFrom\": \"2026-01-01\", \"maxItems\": 30, \"maxPages\": 8}\n```\n\nDeeper history for the latest timeline:\n\n```json\n{\"mode\": \"getLatest\", \"maxItems\": 150, \"maxPages\": 10}\n```\n\n## Output\n\n| Field | Type | Description |\n|---|---|---|\n| `title` | string | Article headline |\n| `articleUrl` | string | Canonical article URL on apartmenttherapy.com |\n| `sourceUrl` | string | Same canonical URL, provided as the standard source field |\n| `articleId` | string | Numeric article ID from the URL |\n| `slug` | string | URL slug without the numeric ID |\n| `author` | string | Author byline |\n| `publishDate` | string | Publication date, ISO 8601 UTC |\n| `category` | string | Primary topic as published |\n| `categorySlug` | string | Normalised topic slug |\n| `tags` | array | Public topic tags |\n| `summary` | string | Short article description |\n| `imageUrl` | string | Lead image URL |\n| `feed` | string | `main`, `tech` or `web` |\n| `dataSource` | string | `live`, `archive` or `webSearch` |\n| `isSponsored` | boolean | Present when the article is marked sponsored |\n| `hasVideo` | boolean | Present when the article carries the video tag |\n| `recordType` | string | Always `article` |\n| `scrapedAt` | string | Capture time, ISO 8601 UTC |\n\nEmpty fields are omitted, never emitted as `null`.\n\n## Data sources and limits\n\n- **Live feed** — Apartment Therapy's public RSS feeds carry the newest 20 main-feed posts and 20 tech posts, including title, author, date, categories, summary and lead image.\n- **Historical snapshots** — the public Internet Archive keeps snapshots of the main feed. `maxPages` scans them newest-first for older complete records. Coverage depends on snapshot availability, so very deep history is not guaranteed.\n- **News index** — keyword search supplements the feed and snapshots with results from Google News' public Apartment Therapy index. These records carry title, date and canonical URL; author, summary, category and image are omitted when the index does not provide them.\n- **WordPress REST API** — `/wp-json/wp/v2/...` returns `403 Access denied` to cookieless server clients (direct, datacenter proxy and residential proxy all tested). The actor uses the public feeds and index instead.\n- Category browsing uses the real topic tags carried by feed and snapshot records. A category that has no recent or snapshotted articles returns no records; raise `maxPages` to search deeper.\n\n## FAQ\n\n**How many articles can one run return?** `maxItems` accepts 1–200. The live feed covers the newest 20 per feed; historical snapshots and the news index supply older records.\n\n**Why do some search results lack an author or image?** Search-index records only expose title, publish date and URL. Complete records come from the live feed or historical snapshots.\n\n**Can I combine a keyword with a category?** Yes. `searchArticles` honours `category` and `authorFilter` for feed and snapshot records. When either filter is set, search-index records are skipped because they cannot prove the match.\n\n**How do I get the whole archive?** There is no complete public archive endpoint. Use larger `maxPages` values and partition with `category`, `authorFilter`, `dateFrom` and `dateTo` to reach more records.\n\n**Is this affiliated with Apartment Therapy?** No. This is an independent actor that reads publicly published content and is not affiliated with or endorsed by Apartment Therapy.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "apartment-therapy-article-scraper",
      "title": "Apartment Therapy Article Scraper",
      "description": "Scrape Apartment Therapy home, decor, DIY and small-space articles: newest posts, keyword search, category browse, author and date filters, with title, author, date, section, tags, summary and image.",
      "version": "1.1",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Apartment Therapy Scraper Input",
        "description": "Get the newest Apartment Therapy articles, search by keyword across the live feed and public archive, or browse a home-and-design category.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Scraping Mode",
            "type": "string",
            "description": "What to scrape: getLatest (newest articles), searchArticles (keyword search across the live feed and archive), or browseCategory (browse a topic).",
            "editor": "select",
            "enum": [
              "getLatest",
              "searchArticles",
              "browseCategory"
            ],
            "enumTitles": [
              "Get Latest Articles",
              "Search Articles by Keyword",
              "Browse by Category"
            ],
            "default": "getLatest",
            "prefill": "getLatest"
          },
          "query": {
            "title": "Search Query",
            "type": "string",
            "description": "Keyword(s) to search in titles, summaries, categories and tags. Used when mode=searchArticles.",
            "editor": "textfield",
            "prefill": "small apartment ideas"
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Topic to browse. Used when mode=browseCategory; `main` means all topics.",
            "editor": "select",
            "enum": [
              "main",
              "decorating",
              "organizing",
              "diy",
              "shopping",
              "small-spaces",
              "kitchen",
              "bathroom",
              "bedroom",
              "living-room",
              "house-tours",
              "before-and-after",
              "home-projects",
              "cleaning",
              "plants",
              "real-estate",
              "money",
              "life",
              "tech",
              "news"
            ],
            "enumTitles": [
              "All Topics",
              "Decorating",
              "Organizing",
              "DIY",
              "Shopping",
              "Small Spaces",
              "Kitchen",
              "Bathroom",
              "Bedroom",
              "Living Room",
              "House Tours",
              "Before & After",
              "Home Projects",
              "Cleaning",
              "Plants & Yard",
              "Real Estate",
              "Money",
              "Life",
              "Tech",
              "News"
            ],
            "default": "main",
            "prefill": "main"
          },
          "authorFilter": {
            "title": "Author Filter",
            "type": "string",
            "description": "Keep only articles whose author name contains this text (case-insensitive).",
            "editor": "textfield"
          },
          "feed": {
            "title": "Feed",
            "type": "string",
            "description": "Which Apartment Therapy feed to read: main (home & design), tech (home technology), or all.",
            "editor": "select",
            "enum": [
              "main",
              "tech",
              "all"
            ],
            "enumTitles": [
              "Main feed",
              "Tech feed",
              "Both feeds"
            ],
            "default": "main",
            "prefill": "main"
          },
          "sortBy": {
            "title": "Sort Order",
            "type": "string",
            "description": "Result order. relevance suits keyword searches; newest and oldest sort by publish date.",
            "editor": "select",
            "enum": [
              "relevance",
              "newest",
              "oldest"
            ],
            "enumTitles": [
              "Relevance",
              "Newest first",
              "Oldest first"
            ],
            "default": "relevance",
            "prefill": "relevance"
          },
          "dateFrom": {
            "title": "Published from",
            "type": "string",
            "description": "Optional earliest publish date, YYYY-MM-DD.",
            "editor": "textfield"
          },
          "dateTo": {
            "title": "Published to",
            "type": "string",
            "description": "Optional latest publish date, YYYY-MM-DD.",
            "editor": "textfield"
          },
          "maxItems": {
            "title": "Max Items",
            "type": "integer",
            "description": "Maximum number of articles to return (1–200).",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "prefill": 3
          },
          "maxPages": {
            "title": "History Depth",
            "type": "integer",
            "description": "How many historical RSS snapshots to scan beyond the live feed. 1 = live feed only; 20 = deepest available history.",
            "minimum": 1,
            "maximum": 20,
            "default": 2,
            "prefill": 1
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Apartment Therapy Article Scraper Output",
        "description": "Apartment Therapy articles with title, canonical URL, author, publish date, category, tags, summary and image. Search-index records may omit fields the index does not carry.",
        "type": "object",
        "properties": {
          "results": {
            "type": "string",
            "title": "Results",
            "description": "All records from the run, in the default dataset.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Apartment Therapy Article Scraper",
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "title",
                  "articleUrl",
                  "sourceUrl",
                  "author",
                  "publishDate",
                  "category",
                  "categorySlug",
                  "tags",
                  "summary",
                  "imageUrl",
                  "feed",
                  "dataSource",
                  "recordType",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "articleUrl": {
                    "label": "Article URL",
                    "format": "link"
                  },
                  "author": {
                    "label": "Author",
                    "format": "text"
                  },
                  "publishDate": {
                    "label": "Publish Date",
                    "format": "date"
                  },
                  "category": {
                    "label": "Category",
                    "format": "text"
                  },
                  "tags": {
                    "label": "Tags",
                    "format": "array"
                  },
                  "summary": {
                    "label": "Summary",
                    "format": "text"
                  },
                  "imageUrl": {
                    "label": "Image URL",
                    "format": "link"
                  },
                  "recordType": {
                    "label": "Record Type",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "date"
                  },
                  "sourceUrl": {
                    "label": "Source URL",
                    "format": "link"
                  },
                  "categorySlug": {
                    "label": "Category Slug",
                    "format": "text"
                  },
                  "feed": {
                    "label": "Feed",
                    "format": "text"
                  },
                  "dataSource": {
                    "label": "Data Source",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# Apartment Therapy Article Scraper\n\nCollect **Apartment Therapy** articles about decorating, DIY, organizing, house tours, kitchen and bathroom makeovers, small-space living, shopping guides and home technology. Pull the newest posts, search by keyword across recent and historical content, or browse a topic. Every record is captured cookielessly — no login, API key or proxy setup.\n\n## Modes\n\n| Mode | What it returns |\n|---|---|\n| `getLatest` | Newest articles from the live feed, continuing into historical snapshots when `maxItems` is larger than the live feed |\n| `searchArticles` | Keyword matches from the live feed, historical snapshots and the public news index |\n| `browseCategory` | Articles carrying a selected topic tag, including historical snapshots |\n\n`feed` selects the main home-and-design feed, the tech feed, or both. `authorFilter`, `dateFrom` and `dateTo` narrow any mode. `maxPages` controls how deep the historical scan goes, and `maxItems` caps the result.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `getLatest` | `getLatest`, `searchArticles` or `browseCategory` |\n| `query` | string | – | Keywords for `searchArticles`; prefill is `small apartment ideas` |\n| `category` | select | `main` | Topic for `browseCategory` (see list below) |\n| `authorFilter` | string | – | Partial, case-insensitive author name |\n| `feed` | select | `main` | `main`, `tech` or `all` |\n| `sortBy` | select | `relevance` | `relevance`, `newest` or `oldest` |\n| `dateFrom` | string | – | Earliest publish date, `YYYY-MM-DD` |\n| `dateTo` | string | – | Latest publish date, `YYYY-MM-DD` |\n| `maxItems` | integer | `50` | Maximum records to return (1–200) |\n| `maxPages` | integer | `2` | Historical snapshots to scan (1–20; 1 = live feed only) |\n\nCategories: `main`, `decorating`, `organizing`, `diy`, `shopping`, `small-spaces`, `kitchen`, `bathroom`, `bedroom`, `living-room`, `house-tours`, `before-and-after`, `home-projects`, `cleaning`, `plants`, `real-estate`, `money`, `life`, `tech`, `news`.\n\n### Examples\n\nNewest articles:\n\n```json\n{\"mode\": \"getLatest\", \"maxItems\": 25}\n```\n\nKeyword search across the archive:\n\n```json\n{\"mode\": \"searchArticles\", \"query\": \"small kitchen storage\", \"maxItems\": 40, \"maxPages\": 6}\n```\n\nBrowse a topic with an author and date filter:\n\n```json\n{\"mode\": \"browseCategory\", \"category\": \"before-and-after\", \"authorFilter\": \"sarah\", \"dateFrom\": \"2026-01-01\", \"maxItems\": 30, \"maxPages\": 8}\n```\n\nDeeper history for the latest timeline:\n\n```json\n{\"mode\": \"getLatest\", \"maxItems\": 150, \"maxPages\": 10}\n```\n\n## Output\n\n| Field | Type | Description |\n|---|---|---|\n| `title` | string | Article headline |\n| `articleUrl` | string | Canonical article URL on apartmenttherapy.com |\n| `sourceUrl` | string | Same canonical URL, provided as the standard source field |\n| `articleId` | string | Numeric article ID from the URL |\n| `slug` | string | URL slug without the numeric ID |\n| `author` | string | Author byline |\n| `publishDate` | string | Publication date, ISO 8601 UTC |\n| `category` | string | Primary topic as published |\n| `categorySlug` | string | Normalised topic slug |\n| `tags` | array | Public topic tags |\n| `summary` | string | Short article description |\n| `imageUrl` | string | Lead image URL |\n| `feed` | string | `main`, `tech` or `web` |\n| `dataSource` | string | `live`, `archive` or `webSearch` |\n| `isSponsored` | boolean | Present when the article is marked sponsored |\n| `hasVideo` | boolean | Present when the article carries the video tag |\n| `recordType` | string | Always `article` |\n| `scrapedAt` | string | Capture time, ISO 8601 UTC |\n\nEmpty fields are omitted, never emitted as `null`.\n\n## Data sources and limits\n\n- **Live feed** — Apartment Therapy's public RSS feeds carry the newest 20 main-feed posts and 20 tech posts, including title, author, date, categories, summary and lead image.\n- **Historical snapshots** — the public Internet Archive keeps snapshots of the main feed. `maxPages` scans them newest-first for older complete records. Coverage depends on snapshot availability, so very deep history is not guaranteed.\n- **News index** — keyword search supplements the feed and snapshots with results from Google News' public Apartment Therapy index. These records carry title, date and canonical URL; author, summary, category and image are omitted when the index does not provide them.\n- **WordPress REST API** — `/wp-json/wp/v2/...` returns `403 Access denied` to cookieless server clients (direct, datacenter proxy and residential proxy all tested). The actor uses the public feeds and index instead.\n- Category browsing uses the real topic tags carried by feed and snapshot records. A category that has no recent or snapshotted articles returns no records; raise `maxPages` to search deeper.\n\n## FAQ\n\n**How many articles can one run return?** `maxItems` accepts 1–200. The live feed covers the newest 20 per feed; historical snapshots and the news index supply older records.\n\n**Why do some search results lack an author or image?** Search-index records only expose title, publish date and URL. Complete records come from the live feed or historical snapshots.\n\n**Can I combine a keyword with a category?** Yes. `searchArticles` honours `category` and `authorFilter` for feed and snapshot records. When either filter is set, search-index records are skipped because they cannot prove the match.\n\n**How do I get the whole archive?** There is no complete public archive endpoint. Use larger `maxPages` values and partition with `category`, `authorFilter`, `dateFrom` and `dateTo` to reach more records.\n\n**Is this affiliated with Apartment Therapy?** No. This is an independent actor that reads publicly published content and is not affiliated with or endorsed by Apartment Therapy.\n",
      "dockerfile": "../Dockerfile"
    },
    "buildNumber": "1.1.1",
    "imageDigest": "f2aa85b20de1c5ab8c14861188e0a3c785db5e5997811b295754e4ca23fe7396",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.005116666666666667
    }
  }
}