Sign inTry it

Search classifieds on Publi24.

Searches Publi24.ro, the Romanian classifieds site, like its search page: title, price in RON, location, short description and listing link. Promoted ('Promovat') listings are left out. First results page only.

No reports yetRead-only, no login
Site
Publi24, Romania
Version
v1
Runs, last 7 days
No reports yet
sha256
82133be3f03e…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search classifieds on Publi24.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "publi24.ro/search-listings",
    "params": {
      "query": "bicicleta"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/hirdetesek?qServer-rendered search results page /hirdetesek?q=...; read-only GET. Regular listings are div.article-item inside .article-list; promoted ones carry a .art-promoted badge and are dropped.

Parameters

from your agent
querystringrequiredWhat to look for, e.g. 'bicicleta', 'laptop', 'canapea'

Returns

to your agent
itemsobject[]description, location, price_ron, title, url
querystring

Where it can send

  • www.publi24.ro

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.items) > `0`
  • length(output.items[?price_ron != `null`]) > `0`
  • length(output.items[?starts_with(url, 'https://www.publi24.ro/')]) == length(output.items)

Raw recipe

Served as canonical JSON from /api/v1/recipes/publi24.ro/search-listings, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/publi24.ro/search-listings | shasum -a 256
# 82133be3f03eae28f622dc6967d420c51c9f1fda62aec1d866f0e3fbc10b7ce2
publi24.ro/search-listings.json, v1
{
  "description": "Searches Publi24.ro, the Romanian classifieds site, like its search page: title, price in RON, location, short description and listing link. Promoted ('Promovat') listings are left out. First results page only.",
  "effect": "read",
  "id": "publi24.ro/search-listings",
  "keywords": [
    "publi24",
    "publi24.ro",
    "anunturi",
    "anunțuri",
    "anunturi gratuite",
    "clasificate",
    "vanzari",
    "vânzări",
    "romania",
    "second hand",
    "classifieds",
    "marketplace",
    "ieftin",
    "bicicleta"
  ],
  "output": {
    "schema": {
      "properties": {
        "items": {
          "items": {
            "properties": {
              "description": {
                "description": "Short text from the listing, may be truncated",
                "type": [
                  "string",
                  "null"
                ]
              },
              "location": {
                "description": "City and district, e.g. 'Sibiu, Sibiu'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "price_ron": {
                "description": "Asking price in RON, null when not shown or not a number",
                "type": [
                  "number",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "items"
      ],
      "type": "object"
    },
    "value": "{query: params.query, items: steps.search.listings[?title != `null` && href != `null` && promoted == `null`].{title: title, price_ron: (price && to_number(replace(replace(replace(price, 'RON', ''), ' ', ''), ' ', ''))) || `null`, location: location || `null`, description: description || `null`, url: href}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "What to look for, e.g. 'bicicleta', 'laptop', 'canapea'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /hirdetesek?q=<query> (the search form's action) returns 200 HTML. Regular listings are div.article-item under .article-list with title link, span.article-price (e.g. '1 500 RON'), p.article-location and p.article-description. Promoted listings sit above them with a .art-promoted badge and are dropped. The JSON-LD ItemList on the page is not valid JSON, so the HTML is read instead. Listing links are absolute.",
    "recorded_at": "2026-11-08T16:20:00.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "RO",
    "id": "publi24.ro",
    "language": "ro",
    "name": "Publi24",
    "origin": "https://www.publi24.ro",
    "origins": [
      "https://www.publi24.ro"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered search results page /hirdetesek?q=...; read-only GET. Regular listings are div.article-item inside .article-list; promoted ones carry a .art-promoted badge and are dropped.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "listings": {
            "fields": {
              "description": {
                "selector": "p.article-description"
              },
              "href": {
                "attr": "href",
                "selector": "h2.article-title a"
              },
              "location": {
                "selector": "p.article-location span"
              },
              "price": {
                "selector": "span.article-price"
              },
              "promoted": {
                "selector": ".art-promoted"
              },
              "title": {
                "selector": "h2.article-title a"
              }
            },
            "max": 60,
            "selector": ".article-list .article-item"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/hirdetesek"
      }
    }
  ],
  "task": "Search classifieds on Publi24",
  "tos": {
    "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.items) > `0`",
      "length(output.items[?price_ron != `null`]) > `0`",
      "length(output.items[?starts_with(url, 'https://www.publi24.ro/')]) == length(output.items)"
    ],
    "example_params": {
      "query": "bicicleta"
    },
    "max_ms": 5000
  },
  "version": 1
}