Web scraping and Iranian-web data tools for AI agents: JS rendering, proxies, Markdown output.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <Barchin API key from https://barchin.net/dashboard/api-keys>
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Barchin actor 'codal-scraper' (finance). اطلاعیههای ناشران بورسی را از کدال بگیرید: شمارهی پیگیری، نماد، نام شرکت، کد و عنوان اطلاعیه، زمان انتشار و ارسال (هم میلادی هم شمسی)، پایان دوره، حسابرسیشده و تلفیقی بودن، و پیوستهای PDF و Excel. با parseTables جدولهای خود گزارش هم استخراج میشوند. ⚠️ حسابرسیشده، تلفیقی و پایان دوره فقط در عن… Base fee 8 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
عبارتی که باید در عنوان اطلاعیه باشد؛ مثل «افزایش سرمایه». خالی یعنی بدون فیلتر عنوان. ⚠️ این فیلتر روی سرور کدال اثر ندارد (پارامتر Search خودِ کدال نادیده گرفته میشود)؛ بهجایش این اکتور عنوان هر اطلاعیهی واکشیشده را خودش بررسی میکند و برای جبران ردیفهای حذفشده صفحهی بیشتری هم میخواند — در سقف بودجهی همان اجرا.
فقط اطلاعیههای منتشرشده تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۵/۰۷/۰۴.
نماد بورسی، دقیقاً همانطور که در کدال نوشته میشود؛ مثل «فولاد» یا «خودرو». برای هر نماد یک جستوجوی جدا انجام میشود؛ حداکثر 20 نماد. اگر نماد را نمیدانید، بهجای آن «نام شرکتها» را در بخش فیلترها بدهید. چند نماد با هم داده شود، سهم هر کدام از «حداکثر تعداد ردیف» مساوی محاسبه میشود؛ اگر نمادی هیچ اطلاعیهای نداشته باشد در ستون unresolvedInputs مشخص میشود.
فقط اطلاعیههای منتشرشده از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود.
سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000.
آدرس فایلهای PDF و Excel هر اطلاعیه در ستون attachments میآید. برای اطلاعیههای «فقط-پیوست» (پورتفوی، تصمیمات مجمع) که کدال فقط لینک صفحهی واسط Attachment.aspx را میدهد، «دانلود فایل» آن صفحه را هم باز میکند و لینک واقعی هر فایل پشت دکمهی جاوااسکریپتیاش (و نام فایل) را برمیگرداند — با هزینهی یک درخواست اضافه بهازای هر ردیفی که این نوع پیوست را دارد. ⚠️ هنوز فایل در استوریج برچین کپی نمیشود، فقط لینک واقعیتر میشود؛ storageKey همیشه null است. بدون این گزینه («فقط آدرس فایل»، پیشفرض)، این نوع پیوست فقط لینک همان صفحهی واسط را میدهد، بدون هزینهی اضافه.
فقط اطلاعیههای یک نوع؛ مثل «ن-۱۰» برای صورتهای مالی یا «ن-۳۰» برای گزارش فعالیت ماهانه. خالی یعنی همهی انواع. حداکثر 20 کد؛ برای هر کد یک جستوجوی جدا انجام میشود. برای اطلاعیههای صندوق (پورتفوی، تصمیمات مجمع) خودِ کدال letterCode را در پاسخش پر نمیکند؛ در آن موارد این فیلتر اثر ندارد.
صفحهی هر اطلاعیه را هم باز میکند و جدولهای آن را در ستون tables میآورد — برای هر ردیف یک صفحهی اضافه با هزینهی کف پروکسی مسکونی (حدود ۱۵ کردیت). برای گزارشهایی که کدال با HTML رندر میکند جدولها مستقیم خوانده میشوند؛ برای گزارشهایی مثل ن-۳۰ که در مرورگر از یک payload جاوااسکریپتی ساخته میشوند همان payload پردازش میشود. برای صورتهای مالی حسابرسیشده (ن-۱۰) فقط متن نظر حسابرس جدول شمرده میشود؛ ارقام صورتهای مالی در پیوست Excel هستند که این اکتور دانلود نمیکند. با همین صفحه، isAudited و isConsolidated هم — وقتی خودِ گزارش آنها را صریح اعلام کرده باشد — بهجای حدس از روی عنوان، از همین payload خوانده میشوند.
بهجای نماد، نام کامل و دقیق شرکت را همانطور که در ثبت کدال آمده بدهید؛ مثل «فولاد مبارکه اصفهان». این نام در فهرست رسمی شرکتهای کدال جستوجو و به نماد تبدیل میشود، دقیقاً همان فهرستی که کادر «نام» در سایت کدال از آن استفاده میکند — پس باید عیناً یکی باشد، نه بخشی از نام. فقط وقتی به کار میرود که «نمادها» خالی باشد. حداکثر 20 نام؛ نامی که در آن فهرست پیدا نشود در ستون unresolvedInputs مشخص میشود، نه اینکه بیصدا صفر نتیجه بدهد.
ستون industryGroup را از کد صنعت ثبتشدهی هر ناشر در فهرست رسمی شرکتهای کدال پر میکند (مثل «فلزات اساسی» برای فولاد) — با هزینهی یک فچ یکبارهی همان فهرست در کل اجرا (نه بهازای ردیف)؛ اگر «نام شرکتها» هم داده باشد، همان یک فچ برای هر دو کار استفاده میشود، نه دوبار. ⚠️ کدال خودش هیچ فیلد «بازار» (بورس/فرابورس/پایه) در این فهرست ندارد؛ برای آن از «tsetmc-scraper» استفاده کنید.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Barchin actor 'codal-scraper' (finance). اطلاعیههای ناشران بورسی را از کدال بگیرید: شمارهی پیگیری، نماد، نام شرکت، کد و عنوان اطلاعیه، زمان انتشار و ارسال (هم میلادی هم شمسی)، پایان دوره، حسابرسیشده و تلفیقی بودن، و پیوستهای PDF و Excel. با parseTables جدولهای خود گزارش هم استخراج میشوند. ⚠️ حسابرسیشده، تلفیقی و پایان دوره فقط در عن… Base fee 8 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| query | string | عبارتی که باید در عنوان اطلاعیه باشد؛ مثل «افزایش سرمایه». خالی یعنی بدون فیلتر عنوان. ⚠️ این فیلتر روی سرور کدال اثر ندارد (پارامتر Search خودِ کدال نادیده گرفته میشود)؛ بهجایش این اکتور عنوان هر اطلاعیهی واکشیشده را خودش بررسی میکند و برای جبران ردیفهای حذفشده صفحهی بیشتری هم میخواند — در سقف بودجهی همان اجرا. |
| dateTo | string | فقط اطلاعیههای منتشرشده تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۵/۰۷/۰۴. |
| symbols | array | نماد بورسی، دقیقاً همانطور که در کدال نوشته میشود؛ مثل «فولاد» یا «خودرو». برای هر نماد یک جستوجوی جدا انجام میشود؛ حداکثر 20 نماد. اگر نماد را نمیدانید، بهجای آن «نام شرکتها» را در بخش فیلترها بدهید. چند نماد با هم داده شود، سهم هر کدام از «حداکثر تعداد ردیف» مساوی محاسبه میشود؛ اگر نمادی هیچ اطلاعیهای نداشته باشد در ستون unresolvedInputs مشخص میشود. |
| dateFrom | string | فقط اطلاعیههای منتشرشده از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
| attachments | string | آدرس فایلهای PDF و Excel هر اطلاعیه در ستون attachments میآید. برای اطلاعیههای «فقط-پیوست» (پورتفوی، تصمیمات مجمع) که کدال فقط لینک صفحهی واسط Attachment.aspx را میدهد، «دانلود فایل» آن صفحه را هم باز میکند و لینک واقعی هر فایل پشت دکمهی جاوااسکریپتیاش (و نام فایل) را برمیگرداند — با هزینهی یک درخواست اضافه بهازای هر ردیفی که این نوع پیوست را دارد. ⚠️ هنوز فایل در استوریج برچین کپی نمیشود، فقط لینک واقعیتر میشود؛ storageKey همیشه null است. بدون این گزینه («فقط آدرس فایل»، پیشفرض)، این نوع پیوست فقط لینک همان صفحهی واسط را میدهد، بدون هزینهی اضافه. |
| letterCodes | array | فقط اطلاعیههای یک نوع؛ مثل «ن-۱۰» برای صورتهای مالی یا «ن-۳۰» برای گزارش فعالیت ماهانه. خالی یعنی همهی انواع. حداکثر 20 کد؛ برای هر کد یک جستوجوی جدا انجام میشود. برای اطلاعیههای صندوق (پورتفوی، تصمیمات مجمع) خودِ کدال letterCode را در پاسخش پر نمیکند؛ در آن موارد این فیلتر اثر ندارد. |
| parseTables | boolean | صفحهی هر اطلاعیه را هم باز میکند و جدولهای آن را در ستون tables میآورد — برای هر ردیف یک صفحهی اضافه با هزینهی کف پروکسی مسکونی (حدود ۱۵ کردیت). برای گزارشهایی که کدال با HTML رندر میکند جدولها مستقیم خوانده میشوند؛ برای گزارشهایی مثل ن-۳۰ که در مرورگر از یک payload جاوااسکریپتی ساخته میشوند همان payload پردازش میشود. برای صورتهای مالی حسابرسیشده (ن-۱۰) فقط متن نظر حسابرس جدول شمرده میشود؛ ارقام صورتهای مالی در پیوست Excel هستند که این اکتور دانلود نمیکند. با همین صفحه، isAudited و isConsolidated هم — وقتی خودِ گزارش آنها را صریح اعلام کرده باشد — بهجای حدس از روی عنوان، از همین payload خوانده میشوند. |
| companyNames | array | بهجای نماد، نام کامل و دقیق شرکت را همانطور که در ثبت کدال آمده بدهید؛ مثل «فولاد مبارکه اصفهان». این نام در فهرست رسمی شرکتهای کدال جستوجو و به نماد تبدیل میشود، دقیقاً همان فهرستی که کادر «نام» در سایت کدال از آن استفاده میکند — پس باید عیناً یکی باشد، نه بخشی از نام. فقط وقتی به کار میرود که «نمادها» خالی باشد. حداکثر 20 نام؛ نامی که در آن فهرست پیدا نشود در ستون unresolvedInputs مشخص میشود، نه اینکه بیصدا صفر نتیجه بدهد. |
| includeIndustryGroup | boolean | ستون industryGroup را از کد صنعت ثبتشدهی هر ناشر در فهرست رسمی شرکتهای کدال پر میکند (مثل «فلزات اساسی» برای فولاد) — با هزینهی یک فچ یکبارهی همان فهرست در کل اجرا (نه بهازای ردیف)؛ اگر «نام شرکتها» هم داده باشد، همان یک فچ برای هر دو کار استفاده میشود، نه دوبار. ⚠️ کدال خودش هیچ فیلد «بازار» (بورس/فرابورس/پایه) در این فهرست ندارد؛ برای آن از «tsetmc-scraper» استفاده کنید. |
{
"type": "object",
"title": "Codal Scraper",
"required": [],
"properties": {
"query": {
"type": "string",
"title": "جستوجو در عنوان",
"editor": "textfield",
"description": "عبارتی که باید در عنوان اطلاعیه باشد؛ مثل «افزایش سرمایه». خالی یعنی بدون فیلتر عنوان. ⚠️ این فیلتر روی سرور کدال اثر ندارد (پارامتر Search خودِ کدال نادیده گرفته میشود)؛ بهجایش این اکتور عنوان هر اطلاعیهی واکشیشده را خودش بررسی میکند و برای جبران ردیفهای حذفشده صفحهی بیشتری هم میخواند — در سقف بودجهی همان اجرا."
},
"dateTo": {
"type": "string",
"title": "تا تاریخ",
"editor": "textfield",
"description": "فقط اطلاعیههای منتشرشده تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۵/۰۷/۰۴."
},
"symbols": {
"type": "array",
"items": {
"type": "string"
},
"title": "نمادها",
"editor": "stringList",
"prefill": [
"فولاد"
],
"description": "نماد بورسی، دقیقاً همانطور که در کدال نوشته میشود؛ مثل «فولاد» یا «خودرو». برای هر نماد یک جستوجوی جدا انجام میشود؛ حداکثر 20 نماد. اگر نماد را نمیدانید، بهجای آن «نام شرکتها» را در بخش فیلترها بدهید. چند نماد با هم داده شود، سهم هر کدام از «حداکثر تعداد ردیف» مساوی محاسبه میشود؛ اگر نمادی هیچ اطلاعیهای نداشته باشد در ستون unresolvedInputs مشخص میشود."
},
"dateFrom": {
"type": "string",
"title": "از تاریخ",
"editor": "textfield",
"description": "فقط اطلاعیههای منتشرشده از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود."
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"attachments": {
"enum": [
"none",
"urls",
"download"
],
"type": "string",
"title": "پیوستها",
"editor": "select",
"default": "urls",
"enumTitles": [
"بدون پیوست",
"فقط آدرس فایل",
"دانلود فایل"
],
"description": "آدرس فایلهای PDF و Excel هر اطلاعیه در ستون attachments میآید. برای اطلاعیههای «فقط-پیوست» (پورتفوی، تصمیمات مجمع) که کدال فقط لینک صفحهی واسط Attachment.aspx را میدهد، «دانلود فایل» آن صفحه را هم باز میکند و لینک واقعی هر فایل پشت دکمهی جاوااسکریپتیاش (و نام فایل) را برمیگرداند — با هزینهی یک درخواست اضافه بهازای هر ردیفی که این نوع پیوست را دارد. ⚠️ هنوز فایل در استوریج برچین کپی نمیشود، فقط لینک واقعیتر میشود؛ storageKey همیشه null است. بدون این گزینه («فقط آدرس فایل»، پیشفرض)، این نوع پیوست فقط لینک همان صفحهی واسط را میدهد، بدون هزینهی اضافه.",
"sectionCaption": "جزئیات خروجی"
},
"letterCodes": {
"type": "array",
"items": {
"type": "string"
},
"title": "کد نوع اطلاعیه",
"editor": "stringList",
"description": "فقط اطلاعیههای یک نوع؛ مثل «ن-۱۰» برای صورتهای مالی یا «ن-۳۰» برای گزارش فعالیت ماهانه. خالی یعنی همهی انواع. حداکثر 20 کد؛ برای هر کد یک جستوجوی جدا انجام میشود. برای اطلاعیههای صندوق (پورتفوی، تصمیمات مجمع) خودِ کدال letterCode را در پاسخش پر نمیکند؛ در آن موارد این فیلتر اثر ندارد."
},
"parseTables": {
"type": "boolean",
"title": "استخراج جدولهای اطلاعیه",
"default": false,
"description": "صفحهی هر اطلاعیه را هم باز میکند و جدولهای آن را در ستون tables میآورد — برای هر ردیف یک صفحهی اضافه با هزینهی کف پروکسی مسکونی (حدود ۱۵ کردیت). برای گزارشهایی که کدال با HTML رندر میکند جدولها مستقیم خوانده میشوند؛ برای گزارشهایی مثل ن-۳۰ که در مرورگر از یک payload جاوااسکریپتی ساخته میشوند همان payload پردازش میشود. برای صورتهای مالی حسابرسیشده (ن-۱۰) فقط متن نظر حسابرس جدول شمرده میشود؛ ارقام صورتهای مالی در پیوست Excel هستند که این اکتور دانلود نمیکند. با همین صفحه، isAudited و isConsolidated هم — وقتی خودِ گزارش آنها را صریح اعلام کرده باشد — بهجای حدس از روی عنوان، از همین payload خوانده میشوند."
},
"companyNames": {
"type": "array",
"items": {
"type": "string"
},
"title": "نام شرکتها",
"editor": "stringList",
"description": "بهجای نماد، نام کامل و دقیق شرکت را همانطور که در ثبت کدال آمده بدهید؛ مثل «فولاد مبارکه اصفهان». این نام در فهرست رسمی شرکتهای کدال جستوجو و به نماد تبدیل میشود، دقیقاً همان فهرستی که کادر «نام» در سایت کدال از آن استفاده میکند — پس باید عیناً یکی باشد، نه بخشی از نام. فقط وقتی به کار میرود که «نمادها» خالی باشد. حداکثر 20 نام؛ نامی که در آن فهرست پیدا نشود در ستون unresolvedInputs مشخص میشود، نه اینکه بیصدا صفر نتیجه بدهد.",
"sectionCaption": "فیلترها"
},
"includeIndustryGroup": {
"type": "boolean",
"title": "گروه صنعت ناشر",
"default": false,
"description": "ستون industryGroup را از کد صنعت ثبتشدهی هر ناشر در فهرست رسمی شرکتهای کدال پر میکند (مثل «فلزات اساسی» برای فولاد) — با هزینهی یک فچ یکبارهی همان فهرست در کل اجرا (نه بهازای ردیف)؛ اگر «نام شرکتها» هم داده باشد، همان یک فچ برای هر دو کار استفاده میشود، نه دوبار. ⚠️ کدال خودش هیچ فیلد «بازار» (بورس/فرابورس/پایه) در این فهرست ندارد؛ برای آن از «tsetmc-scraper» استفاده کنید."
}
},
"description": "اطلاعیههای ناشران بورسی از سامانهی کدال، با فیلتر نماد، نوع اطلاعیه و تاریخ.",
"schemaVersion": 1
}Barchin actor 'digikala-scraper' (ecommerce). عبارت جستوجو، دستهبندی یا آدرس محصول را بدهید تا محصولات دیجیکالا را بگیرید: قیمت و تخفیف (به ریال)، موجودی، امتیاز، برند، مسیر دستهبندی، مشخصات فنی، رنگها و تصاویر. با گزینههای جداگانه فروشندگان، نظرها و پرسشوپاسخ هم بهصورت ردیفهای مستقل برمیگردند. نام نویسندهی نظر و پرسش ذخیره نمیشود. Base fee 8 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| sort | string | ترتیب نتایج جستوجو، مثل «ارزانترین». وقتی سقف ردیف کمتر از کل نتایج باشد، همین ترتیب تعیین میکند کدام محصولها برگردند. |
| query | string | همان عبارتی که در جستوجوی دیجیکالا تایپ میکنید، مثل «لپ تاپ» یا «گوشی سامسونگ». بهجای آن میتوانید «اسلاگ دستهبندی» یا «آدرس محصول یا دستهبندی» را بدهید؛ یکی از این سه کافی است. |
| afterId | integer | شناسهی آخرین نظر/پرسشی که از اجرای قبلی دارید؛ صفحهبندی را دقیقاً همانجا متوقف میکند — چون شناسه دنبالهی پایگاهداده است نه مقداری گردشده مثل تاریخ، نیازی به حاشیهی اطمینان ندارد. اگر «شامل نظرها» و «شامل پرسشوپاسخ» را با هم روشن کنید، همین یک عدد برای هر دو جریان (که شناسههاشان مستقلاند) به کار میرود؛ برای دقت کامل هر جریان را در اجرای جدا بدهید. با «sinceDate» همزمان نمیآید. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
| sinceDate | string | شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. فقط روی «شامل نظرها»/«شامل پرسشوپاسخ» اثر دارد: صفحهبندی هر محصول را همانجا متوقف میکند که به نظر/پرسشی قدیمیتر از این تاریخ برسد، بهجای خواندن دوبارهی کل تاریخچه در هر اجرای دورهای. دیجیکالا چنین پارامتری در APIاش ندارد؛ این توقف محلی و سمت اکتور است. چون createdAt دیجیکالا فقط دقت روز دارد، یک صفحهی اضافه هم میخواند تا نظر/پرسش همروز با مرز جا نماند؛ با «afterId» همزمان نمیآید. |
Barchin actor 'divar-scraper' (classifieds). شهر، دستهبندی یا عبارت جستوجو را بدهید تا آگهیهای دیوار را بگیرید: عنوان، توضیحات، قیمت و ودیعه و اجاره، ویژگیها (متراژ، سال ساخت، کارکرد و …)، تصاویر و موقعیت تقریبی. برای هر آگهی یک ردیف برمیگردد. شماره تلفن استخراج نمیشود، چون دیوار آن را پشت دکمهی «نمایش شماره» نگه میدارد. Base fee 13 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| query | string | همان چیزی که در کادر جستوجوی دیوار مینویسید، مثل «پراید» یا «آپارتمان ۸۵ متری». خالی بگذارید تا همهی آگهیهای شهر و دستهبندی برگردد؛ یا بهجای آن آدرس آگهی یا صفحهی دیوار را در «startUrls» بدهید. |
| cities | array | اسلاگ شهر از آدرس دیوار: برای divar.ir/s/mashhad بنویسید mashhad. چند شهر با هم مجاز است. خالی یعنی تهران. |
| filters | object | فیلترهای خاص هر دسته که عیناً به API دیوار پاس داده میشوند؛ برای کاربران حرفهای. مثال: {"brand_model": {"repeated_string": {"value": ["Pride"]}}} |
| category | string | اسلاگ دستهبندی از آدرس دیوار، مثل real-estate، cars یا mobile-phones در divar.ir/s/tehran/mobile-phones. خالی یعنی همهی دستهها. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
| priceMax | integer | آگهیهای گرانتر از این قیمت حذف میشوند. به تومان، مثل 500000000 برای ۵۰۰ میلیون. |
Barchin actor 'google-maps-scraper' (maps). عبارت جستوجو و محدودهی مکانی را بدهید تا فهرست کسبوکارها را از گوگلمپس بگیرید: نام، دستهبندی، نشانی، تلفن، وبسایت، مختصات، امتیاز و تعداد نظر، ساعات کاری، امکانات، نظرها و تصاویر. ورودی و خروجی همشکل اکتور compass/crawler-google-places در اپیفای است. برای هر مکان یک ردیف برمیگردد. Base fee 30 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| city | string | فقط نام شهر، مثل «تهران» یا «Boston»؛ نام استان و کشور را اینجا ننویسید و در فیلد خودشان بدهید. بهجای «محل جستوجو». |
| state | string | نام استان یا ایالت، مثل «تهران» یا «Massachusetts». بهجای «محل جستوجو». |
| county | string | نام شهرستان یا ناحیه، مثل «شمیرانات». بهجای «محل جستوجو». |
| website | string | فقط مکانهای دارای وبسایت، یا فقط مکانهای بدون وبسایت برگردند. پیشفرض همه. |
| language | string | زبانی که گوگل نام، دستهبندی، نشانی و نظرها را به آن برمیگرداند، مثل فارسی (fa) یا انگلیسی (en). فیلدهای «تعطیل دائم/موقت» فقط با انگلیسی (en) قابلاعتمادند: تشخیص از روی برچسب متنی گوگل است و با زبانهای دیگر (از جمله فارسی) عملاً همیشه false میماند. |
| placeIds | array | بهجای جستوجو، شناسهی مکان گوگل را بدهید، هر یک در یک خط، مثل ChIJJQz5EZzKw4kRCZ95UajbyGw (با ChIJ یا GhIJ شروع میشود). حداکثر 50 شناسه. هر شناسه یک درخواست اضافه برای تبدیل به شناسهی داخلی گوگل میزند و صفحهی جزئیات آن همیشه گرفته میشود. |
Barchin actor 'google-search' (search). عبارت جستوجو را بدهید تا نتایج ارگانیک گوگل را بهصورت JSON بگیرید: رتبه، عنوان، دامنه، نام سایت و متن توضیح. زبان و کشور نتایج قابل تنظیم است — پیشفرض فارسی و ایران. برای هر نتیجه یک ردیف برمیگردد. Base fee 40 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| mode | string | full (پیشفرض): اول پروکسی دیتاسنتر، و اگر گوگل آن را رد کرد تا چهار IP مسکونی از کشورهای مختلف (هلند، سوئیس، فنلاند، آلمان، بریتانیا)؛ هزینهی پایه ۴۰ کردیت. lite: فقط یک تلاش از پروکسی دیتاسنتر و بدون ارتقا — هزینهی پایه 4 کردیت و سقف کل هر اجرا 10 کردیت برای یک صفحه؛ اگر گوگل همان یک تلاش را رد کند اجرا سریع با خطای blocked تمام میشود و کل کردیت آزاد میشود. در حالت lite نتیجهی همان ورودی تا 6 ساعت از کش برمیگردد (فقط هزینهی پایه؛ با fresh: true کش نادیده گرفته میشود). |
| page | integer | از کدام صفحهی گوگل شروع شود؛ ۱ تا 3. با results بیش از 10، صفحههای بعدی هم به ترتیب خوانده میشوند. position هر ردیف رتبهی سراسری آن است (صفحهی ۲ از ۱۱ شروع میشود). |
| fresh | boolean | فقط در حالت lite معنا دارد: نتیجهی کششده نادیده گرفته و صفحه دوباره خوانده شود. |
| query* | string | همان چیزی که در کادر جستوجوی گوگل مینویسید، مثل «خرید لپ تاپ» یا «web scraping api». عملگرهای گوگل (site:، filetype:، نقلقول) پشتیبانی میشوند. حداکثر ۲۵۶ کاراکتر. برای هر نتیجهی ارگانیک یک ردیف برمیگردد. |
| region | string | کد دوحرفی کشوری که گوگل نتایج آن را نشان دهد (پارامتر gl گوگل)، مثل ir یا de. پیشفرض ir. این با کشور IP خروجی فرق دارد: IP خروجی در این اکتور ثابت است و پارامتر country روی اجرا نادیده گرفته میشود؛ برای نتایج ایران همین فیلد کافی است. |
Barchin actor 'persian-news-scraper' (news). اخبار ایسنا، ایرنا، تسنیم، خبرآنلاین، همشهری آنلاین، زومیت و دیجیاتو را با یک ساختار مشترک بگیرید: تیتر، لید، متن کامل (ساده یا مارکداون)، نویسنده، سرویس، برچسبها، تصویر و زمان انتشار به هر دو تقویم. «انتهای پیام»، اخبار مرتبط، کد خبر و کپشنهای تکراری از متن حذف میشوند. ⚠️ ایسنا، ایرنا و تسنیم ص… Base fee 30 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| mode | string | «آخرین اخبار» فید اصلی هر منبع را میخواند؛ «دستهبندی» فید/صفحهی سرویسی را که در بخش فیلترها مینویسید؛ «جستوجو» برای isna، hamshahri و digiato صفحهی جستوجوی واقعی همان سایت را میخواند، و برای irna، khabaronline، zoomit و tasnim — که جستوجو را در robots.txt خودشان بستهاند یا نتایجش را فقط با جاوااسکریپت میسازند — بهجای آن آخرین اخبار را میگیرد و با «عبارت جستوجو» فیلتر میکند؛ «آدرس مشخص» فقط خبرهایی را که در تنظیمات پیشرفته میدهید؛ «آرشیو sitemap» فید را کنار میگذارد و آرشیو تاریخی واقعی sitemap XML سایت را میخواند — فقط برای hamshahri، khabaronline، zoomit، digiato (توضیح کامل در پایین فرم). |
| query | string | برای isna، hamshahri و digiato عبارتی که به موتور جستوجوی خود همان سایت داده میشود؛ برای بقیهی منابع عبارتی که باید در تیتر، لید یا متن خبر باشد. برای حالت «جستوجو» الزامی است. |
| dateTo | string | فقط خبرهای تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۴/۰۷/۳۰. |
| sources | array | کد خبرگزاریها: isna (ایسنا)، irna (ایرنا)، tasnim (تسنیم)، khabaronline (خبرآنلاین)، hamshahri (همشهری آنلاین)، zoomit (زومیت) و digiato (دیجیاتو). خالی یعنی ایسنا، ایرنا و خبرآنلاین — یا برای حالت «sitemap»، hamshahri، khabaronline، zoomit، digiato. هر منبع یک صفحهی فید باز میکند. |
Barchin actor 'sheypoor-scraper' (marketplace). آگهیهای شیپور را با شهر، دستهبندی، عبارت جستوجو یا آدرس مستقیم استخراج کنید: عنوان، توضیحات، قیمت، ودیعه و اجاره، ویژگیها، تصاویر و موقعیت. خروجی دقیقاً همشکل اکتور دیوار است تا بتوانید دو بازار را کنار هم بگذارید. ⚠️ شمارهی تماس در شیپور برای بازدیدکنندهی بدون حساب پوشانده میشود، پس استخراج… Base fee 8 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| query | string | همان چیزی که در کادر جستوجوی شیپور مینویسید، مثل «پراید» یا «یخچال». خالی بگذارید تا همهی آگهیهای شهر و دستهبندی برگردد؛ یا بهجای آن آدرس شیپور را در «startUrls» بدهید. |
| cities | array | اسلاگ شهر از آدرس شیپور: برای sheypoor.com/s/mashhad بنویسید mashhad. هر شهر جدا جستوجو و نتایجش با هم ادغام میشود. خالی یعنی بدون فیلتر شهر (همهی ایران). توجه: فیلتر شهر شیپور قاطع نیست؛ چند درصد آگهی از شهرها و استانهای اطراف هم در نتایج میآید. |
| filters | object | پارامترهای اضافی که عیناً به آدرس جستوجوی شیپور اضافه میشوند؛ برای کاربران حرفهای. همان کلید و مقدارهایی که بعد از انتخاب یک فیلتر در آدرس صفحهی شیپور ظاهر میشوند، به شکل {"کلید": "مقدار"}. |
| category | string | اسلاگ دستهبندی از آدرس شیپور، مثل vehicles یا real-estate در sheypoor.com/s/tehran/real-estate. برای زیردستهها هم همینطور: آدرس همان زیردسته را در شیپور باز کنید و اسلاگ انتهای آن را بردارید، مثل mobile-tablet در sheypoor.com/s/tehran/mobile-tablet. خالی یعنی همهی دستهها. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
Barchin actor 'tgju-price-scraper' (finance). اسلاگ ابزار یا یک دستهی کامل را بدهید تا نرخ لحظهای طلا، سکه، ارز، رمزارز، نفت و فلزات را از TGJU بگیرید: نرخ، تغییر، درصد تغییر، بیشترین و کمترین روز و زمان بهروزرسانی (میلادی و شمسی). با includeHistory تاریخچهی روزانه هم برمیگردد. واحد نرخ از روی خود ابزار تعیین میشود — ابزارهای ایرانی ریال… Base fee 2 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| dateTo | string | فقط با «شامل تاریخچه»: ردیفهای روزانه تا این تاریخ. شمسی یا میلادی. |
| dateFrom | string | فقط با «شامل تاریخچه»: ردیفهای روزانه از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
| categories | array | بهجای نام بردن تکتک ابزارها، همهی ابزارهای یک دسته را بگیرید: gold (طلا)، coin (سکه)، currency (ارز)، crypto (رمزارز)، oil (نفت)، metals (فلزات) یا stock_index (شاخص بورس). تا سقف «حداکثر تعداد ردیف» پر میشود. این تشخیص فقط حدود ۲۱۳ از ۹۶۳ ابزار فید TGJU را میپوشاند؛ برای بقیه اسلاگ دقیق را در «ابزارها» بدهید. |
| instruments | array | اسلاگ صفحهی ابزار در TGJU — همان بخش آخر آدرس tgju.org/profile/…؛ مثل geram18 (طلای ۱۸ عیار)، sekee (سکهی امامی) یا price_dollar_rl (دلار). حداکثر 100 مورد. یا بهجای نام بردن، یک «دسته» را بدهید. اسلاگی که در فهرست TGJU نباشد صفر ردیف نمیگیرد؛ یک ردیف itemType=notFound برایش برمیگردد. |
Barchin actor 'torob-product-sellers' (e-commerce). آدرس یک صفحهی محصول در ترب (torob.com) را بدهید تا فهرست کامل فروشندهها همراه با قیمت (تومان و ریال)، موجودی، امتیاز فروشگاه و لینک مستقیم هر فروشنده را دریافت کنید. قیمتهای نامعتبر بهصورت خودکار حذف میشوند. Base fee 20 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| url | string | آدرس یک صفحهی محصول در torob.com، مثل https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/ — همان صفحهای که فهرست فروشندهها را نشان میدهد. برای هر فروشندهی آن صفحه یک ردیف برمیگردد. برای چند محصول در یک اجرا، بهجای این فیلد یا در کنار آن از «urls» استفاده کنید. |
| urls | array | برای دریافت فروشندههای چند محصول در یک اجرا: آدرس صفحههای محصول ترب، حداکثر 20 آدرس. هر آدرس یک صفحه حساب میشود و هزینهی هر صفحه جدا محاسبه میشود. اگر «url» را هم پر کنید، به همین فهرست اضافه میشود. |
| fetchAllSellers | boolean | برای هر محصول، یک درخواست اضافه به endpoint خودِ ترب (products_info.sellers_url) میزند تا فهرست کامل فروشندهها را بگیرد، نه فقط همان تعدادی که در صفحهی سرور-رندرشده هست (این تعداد نزد ترب ثابت نیست). فقط وقتی سایت واقعاً فروشندهی بیشتری داشته باشد این درخواست اضافه زده میشود؛ وگرنه هزینهای ندارد. اگر این درخواست حتی بعد از دو تلاش مجدد شکست بخورد، آن محصول بهجای فهرست ناقص اصلاً برنمیگردد. روشن بهطور پیشفرض — خاموشکردنش سقف هزینهی اجرا را نصف میکند اما ممکن است فروشندههای واقعی کمتری برگرداند. |
{
"type": "object",
"title": "Torob Product Sellers Scraper",
"required": [],
"properties": {
"url": {
"type": "string",
"title": "آدرس محصول ترب",
"editor": "textfield",
"pattern": "^https?://(www\\.)?torob\\.com/.*",
"prefill": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/",
"description": "آدرس یک صفحهی محصول در torob.com، مثل https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/ — همان صفحهای که فهرست فروشندهها را نشان میدهد. برای هر فروشندهی آن صفحه یک ردیف برمیگردد. برای چند محصول در یک اجرا، بهجای این فیلد یا در کنار آن از «urls» استفاده کنید."
},
"urls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرس چند محصول ترب",
"editor": "requestListSources",
"maxItems": 20,
"description": "برای دریافت فروشندههای چند محصول در یک اجرا: آدرس صفحههای محصول ترب، حداکثر 20 آدرس. هر آدرس یک صفحه حساب میشود و هزینهی هر صفحه جدا محاسبه میشود. اگر «url» را هم پر کنید، به همین فهرست اضافه میشود."
},
"fetchAllSellers": {
"type": "boolean",
"title": "همهی فروشندهها (فراتر از صفحهی اول)",
"default": true,
"description": "برای هر محصول، یک درخواست اضافه به endpoint خودِ ترب (products_info.sellers_url) میزند تا فهرست کامل فروشندهها را بگیرد، نه فقط همان تعدادی که در صفحهی سرور-رندرشده هست (این تعداد نزد ترب ثابت نیست). فقط وقتی سایت واقعاً فروشندهی بیشتری داشته باشد این درخواست اضافه زده میشود؛ وگرنه هزینهای ندارد. اگر این درخواست حتی بعد از دو تلاش مجدد شکست بخورد، آن محصول بهجای فهرست ناقص اصلاً برنمیگردد. روشن بهطور پیشفرض — خاموشکردنش سقف هزینهی اجرا را نصف میکند اما ممکن است فروشندههای واقعی کمتری برگرداند.",
"sectionCaption": "جزئیات خروجی"
}
},
"description": "آدرس یک یا چند صفحهی محصول ترب را بدهید تا برای هر صفحه، فهرست فروشندهها و قیمتها استخراج شود. ترب در همان صفحه (سرور-رندرشده) فقط بخشی از فروشندهها را نشان میدهد — این سقف ثابت نیست و نزد خود ترب تغییر کرده است؛ به همین دلیل فهرست کامل فروشندهها بهطور پیشفرض گرفته میشود («همهی فروشندهها» روشن است؛ هزینهی یک صفحهی اضافه بهازای هر محصول، فقط وقتی سایت واقعاً فروشندهی بیشتری داشته باشد). اگر گرفتن فهرست کامل حتی بعد از تلاش مجدد شکست بخورد، آن محصول اصلاً در خروجی نمیآید — بهجای فهرست ناقص، چیزی برنمیگردد.",
"schemaVersion": 1
}Barchin actor 'tsetmc-scraper' (finance). شش نوع داده از سرویس رسمی بورس تهران: وضعیت لحظهای یک نماد، تاریخچهی روزانهی تعدیلشده، خرید و فروش حقیقی و حقوقی، عمق بازار، شاخص و دیدهبان کل بازار. نماد فارسی خودش به insCode تبدیل میشود. ⚠️ همهی قیمتها به ریال است. ⚠️ خارج از ساعت معاملات، مقادیر لحظهای صفر میشوند؛ اکتور در این حالت آخر… Base fee 8 credit(s) plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript). Call list_actors for the full input schema.
| Argument | Type | Description |
|---|---|---|
| dateTo | string | فقط روزهای تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۵/۰۷/۰۱. |
| markets | array | فقط برای «دیدهبان کل بازار»: bourse (بورس)، farabourse (فرابورس) یا base (بازار پایه). خالی یعنی همهی تابلو. |
| symbols | array | نماد فارسی همانطور که در تابلو نوشته میشود، مثل «فولاد» یا «خودرو»، یا insCode ۱۷ رقمی (رزولوشن نماد را حذف میکند و یک درخواست کمتر میزند). حداکثر 50 نماد؛ سقف «حداکثر تعداد ردیف» بین نمادهای «تاریخچه» و «حقیقی و حقوقی» بهطور مساوی تقسیم میشود، نه اینکه اولی همه را ببلعد. برای «شاخص» شناسهی شاخص را بدهید (خالی یعنی شاخص کل)؛ برای «دیدهبان کل بازار» لازم نیست. |
| adjusted | boolean | روشن: فقط آخرین روز با قیمت تعدیلشده (با احتساب افزایش سرمایه و سود نقدی) — endpoint تعدیلشدهی خودِ TSETMC آرشیو تاریخی ندارد و همیشه دقیقاً همین یک ردیف را میدهد؛ این محدودیت خودِ سایت است. خاموش (پیشفرض): آرشیو کامل قیمت خام روزانه از اولین روز معاملهی نماد. برای «تاریخچهی روزانه» با بیش از یک ردیف، خاموش بگذارید. |
| dataType | string | چه چیزی برگردد: وضعیت لحظهای کامل هر نماد با نام و ISIN و صنعت (۴ درخواست بهازای هر نماد، ~۶۰ کردیت روی پروکسی مسکونی)، قیمت لحظهای سبک بدون اطلاعات شرکت برای پایش پرتکرار (۲ درخواست بهازای هر نماد)، تاریخچهی روزانه (یک ردیف برای هر روز)، خرید و فروش حقیقی و حقوقی به تفکیک روز، عمق بازار (مظنههای برتر)، مقدار شاخص، یا دیدهبان کل بازار (همهی نمادها با یک درخواست، بدون نیاز به نماد). نمادی که پیدا نشود بهجای حذف بیصدا، ردیفی با itemType=notFound برمیگرداند. |
Check the status of a previous actor run (from an actor_<slug>, run_actor or get_screenshot call) and return its dataset once ready. Free: reading an already-paid-for result costs no credits.
| Argument | Type | Description |
|---|---|---|
| run_id* | string | The run_id returned by an actor_<slug>, run_actor or get_screenshot call. |
{
"type": "object",
"required": [
"run_id"
],
"properties": {
"run_id": {
"type": "string",
"description": "The run_id returned by an actor_<slug>, run_actor or get_screenshot call."
}
}
}Return the caller's remaining Barchin credit balance and a link to top up.
No arguments.
{
"type": "object",
"properties": {}
}Check the status of a previous scrape_url call and return its result — the content, in the requested format — once ready. Free: reading an already-paid-for result costs no credits. If the scrape is still running, returns a processing status to retry shortly.
| Argument | Type | Description |
|---|---|---|
| format | string | |
| max_chars | integer | |
| request_id* | string | The request_id returned by scrape_url. |
{
"type": "object",
"required": [
"request_id"
],
"properties": {
"format": {
"enum": [
"markdown",
"text",
"html"
],
"type": "string",
"default": "markdown"
},
"max_chars": {
"type": "integer",
"default": 40000,
"minimum": 1
},
"request_id": {
"type": "string",
"description": "The request_id returned by scrape_url."
}
}
}Take a screenshot of a web page in a real browser through Barchin's proxies, and return it as a PNG image (first viewport, or the full scrolled page) or a PDF print of the page. Billed as an actor run: a base fee plus the proxy tier price for the one page it renders.
| Argument | Type | Description |
|---|---|---|
| url* | string | The absolute http(s) URL to capture. |
| format | string | |
| full_page | boolean | Scroll to the bottom and capture the full page instead of just the first viewport. PNG only; a PDF always prints the whole page regardless of this flag. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The absolute http(s) URL to capture."
},
"format": {
"enum": [
"png",
"pdf"
],
"type": "string",
"default": "png"
},
"full_page": {
"type": "boolean",
"default": false,
"description": "Scroll to the bottom and capture the full page instead of just the first viewport. PNG only; a PDF always prints the whole page regardless of this flag."
}
}
}List Barchin's ready-made scrapers ('actors') for specific sites and data types (e.g. Instagram, Google Maps, e-commerce listings, business registries). Each entry's input_schema describes the arguments to pass as run_actor(slug, input); a curated set of featured actors also exists as its own direct actor_<slug> tool. Free to call — no credits are charged.
No arguments.
{
"type": "object",
"properties": {}
}Run any Barchin actor by slug with its input object. Use list_actors to discover slugs and input schemas; featured actors also exist as direct actor_<slug> tools. Billed like the actor itself: base fee plus the proxy tier price per fetched page (datacenter 1, residential 15, unblocker 25, +5 with JavaScript).
| Argument | Type | Description |
|---|---|---|
| slug* | string | Actor slug from list_actors, e.g. 'torob-product-sellers'. |
| input | object | The actor's input object matching its input_schema from list_actors. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Actor slug from list_actors, e.g. 'torob-product-sellers'."
},
"input": {
"type": "object",
"default": {},
"description": "The actor's input object matching its input_schema from list_actors."
}
}
}Fetch a web page through Barchin (rotating Iranian/datacenter proxies, optional JavaScript rendering, anti-bot handling) and return its content as Markdown, plain text or raw HTML. Costs credits: datacenter 1, residential 15, unblocker 25, +5 with JavaScript rendering; markdown/text conversion is free.
| Argument | Type | Description |
|---|---|---|
| url* | string | The absolute http(s) URL to fetch. |
| proxy | string | Proxy pool. auto (default) escalates from the cheapest pool only as needed and charges only for the tier that worked. datacenter=1 credit, residential=15, unblocker=25 (each +5 with render_js). |
| format | string | Output format. markdown/text are derived from the fetched HTML at read time, at no extra cost. |
| country | string | Two-letter ISO country code for the exit IP, e.g. 'ir'. Omit for worldwide. |
| wait_for | string | CSS selector to wait for after the page loads, before reading the content. Only valid with render_js=true. |
| max_chars | integer | Truncate markdown/text output to this many characters. |
| render_js | boolean | Render the page in a real browser (JavaScript/SPA content). Costs +5 credits; turn off for plain HTML pages to save credits. |
| accept_binary |
| startPage | integer | صفحهی جستوجویی که این اجرا از آن شروع میکند (نه صفحهی اول همیشه). برای دستههای چندهزارتایی که یک اجرا کل آن را نمیگیرد؛ اجرای بعدی را با شمارهی صفحهی بعد از آخرین صفحهای که گرفتید ادامه دهید. |
| startUrls | array | آدرس صفحهی محصول (…/product/dkp-12345/) یا صفحهی دستهبندی؛ حداکثر 30 آدرس. هر آدرس محصول یک درخواست باز میکند. یا بهجای آدرس، «عبارت جستوجو» یا «اسلاگ دستهبندی» را بدهید. |
| maxProducts | integer | سقف مجزای تعداد محصول، جدا از «حداکثر تعداد ردیف». وقتی خالی بماند، تعداد محصول همان «حداکثر تعداد ردیف» است — رفتار قبلی. پرشدنش برای وقتی است که چند محصول با نظرهای زیاد میخواهید: بدون آن، مثلاً ۱۰ محصول×نظرهای زیاد بهجای هزینهی همان چند محصول، هزارها ردیفِ «حداکثر تعداد ردیف» رزرو میکند. |
| categorySlug | string | بخشی از آدرس صفحهی دستهبندی که پس از category- میآید، مثل mobile-phone یا notebook-netbook-ultrabook. اسلاگهای قدیمی/کلی («laptop» یکی از آنها بود) دیگر با دستهی واقعی محصولها یکی نیستند؛ چنین نتایجی همینجا حذف میشوند تا محصول نامرتبط برنگردد. با عبارت جستوجو هم ترکیب میشود تا فقط در همان دسته جستوجو کند. |
| includeSpecs | boolean | جدول مشخصات فنی هر محصول را در فیلد specs میگذارد. درخواست اضافهای ندارد؛ خاموش کردنش فقط خروجی را کوچکتر میکند. |
| onlyAvailable | boolean | اگر روشن باشد، فقط محصولهایی که الان فروشندهی فعال دارند (قابل خرید) برمیگردند. |
| includeReviews | boolean | نظرهای هر محصول را بهصورت ردیفهای جداگانه با itemType=review برمیگرداند (هر ۲۰ نظر یک صفحهی اضافه). نام نویسنده ذخیره نمیشود. |
| includeSellers | boolean | همهی فروشندگان هر محصول را با قیمت، گارانتی و امتیازشان در فیلد sellers میگذارد. بدون آن فقط فروشندهی پیشفرض (defaultSeller) برمیگردد. درخواست اضافهای ندارد. |
| includeQuestions | boolean | پرسشهای خریداران و پاسخهایشان را با itemType=question برمیگرداند؛ حداکثر 50 پرسش برای هر محصول (هر ۲۰ پرسش یک صفحهی اضافه). نام پرسشگر ذخیره نمیشود. |
| maxReviewsPerProduct | integer | سقف نظرهایی که برای هر محصول گرفته میشود، مثل ۵۰. فقط با «شامل نظرها» اثر دارد؛ سقف کل ردیفها همچنان «حداکثر تعداد ردیف» است. |
{
"type": "object",
"title": "Digikala Scraper",
"required": [],
"properties": {
"sort": {
"enum": [
"relevance",
"newest",
"bestselling",
"price_asc",
"price_desc",
"most_viewed"
],
"type": "string",
"title": "ترتیب نتایج",
"editor": "select",
"default": "relevance",
"enumTitles": [
"مرتبطترین",
"جدیدترین",
"پرفروشترین",
"ارزانترین",
"گرانترین",
"پربازدیدترین"
],
"description": "ترتیب نتایج جستوجو، مثل «ارزانترین». وقتی سقف ردیف کمتر از کل نتایج باشد، همین ترتیب تعیین میکند کدام محصولها برگردند.",
"sectionCaption": "فیلترها"
},
"query": {
"type": "string",
"title": "عبارت جستوجو",
"editor": "textfield",
"prefill": "لپ تاپ",
"description": "همان عبارتی که در جستوجوی دیجیکالا تایپ میکنید، مثل «لپ تاپ» یا «گوشی سامسونگ». بهجای آن میتوانید «اسلاگ دستهبندی» یا «آدرس محصول یا دستهبندی» را بدهید؛ یکی از این سه کافی است."
},
"afterId": {
"type": "integer",
"title": "بعد از این شناسه (نظرها/پرسشها)",
"maximum": 1000000000000,
"minimum": 1,
"description": "شناسهی آخرین نظر/پرسشی که از اجرای قبلی دارید؛ صفحهبندی را دقیقاً همانجا متوقف میکند — چون شناسه دنبالهی پایگاهداده است نه مقداری گردشده مثل تاریخ، نیازی به حاشیهی اطمینان ندارد. اگر «شامل نظرها» و «شامل پرسشوپاسخ» را با هم روشن کنید، همین یک عدد برای هر دو جریان (که شناسههاشان مستقلاند) به کار میرود؛ برای دقت کامل هر جریان را در اجرای جدا بدهید. با «sinceDate» همزمان نمیآید.",
"sectionCaption": "اجرای افزایشی"
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"sinceDate": {
"type": "string",
"title": "از این تاریخ به بعد (نظرها/پرسشها)",
"editor": "textfield",
"description": "شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. فقط روی «شامل نظرها»/«شامل پرسشوپاسخ» اثر دارد: صفحهبندی هر محصول را همانجا متوقف میکند که به نظر/پرسشی قدیمیتر از این تاریخ برسد، بهجای خواندن دوبارهی کل تاریخچه در هر اجرای دورهای. دیجیکالا چنین پارامتری در APIاش ندارد؛ این توقف محلی و سمت اکتور است. چون createdAt دیجیکالا فقط دقت روز دارد، یک صفحهی اضافه هم میخواند تا نظر/پرسش همروز با مرز جا نماند؛ با «afterId» همزمان نمیآید.",
"sectionCaption": "اجرای افزایشی"
},
"startPage": {
"type": "integer",
"title": "شروع از صفحهی جستوجوی شماره",
"default": 1,
"maximum": 100000,
"minimum": 1,
"description": "صفحهی جستوجویی که این اجرا از آن شروع میکند (نه صفحهی اول همیشه). برای دستههای چندهزارتایی که یک اجرا کل آن را نمیگیرد؛ اجرای بعدی را با شمارهی صفحهی بعد از آخرین صفحهای که گرفتید ادامه دهید."
},
"startUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرس محصول یا دستهبندی",
"editor": "requestListSources",
"description": "آدرس صفحهی محصول (…/product/dkp-12345/) یا صفحهی دستهبندی؛ حداکثر 30 آدرس. هر آدرس محصول یک درخواست باز میکند. یا بهجای آدرس، «عبارت جستوجو» یا «اسلاگ دستهبندی» را بدهید."
},
"maxProducts": {
"type": "integer",
"title": "حداکثر تعداد محصول",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف مجزای تعداد محصول، جدا از «حداکثر تعداد ردیف». وقتی خالی بماند، تعداد محصول همان «حداکثر تعداد ردیف» است — رفتار قبلی. پرشدنش برای وقتی است که چند محصول با نظرهای زیاد میخواهید: بدون آن، مثلاً ۱۰ محصول×نظرهای زیاد بهجای هزینهی همان چند محصول، هزارها ردیفِ «حداکثر تعداد ردیف» رزرو میکند."
},
"categorySlug": {
"type": "string",
"title": "اسلاگ دستهبندی",
"editor": "textfield",
"description": "بخشی از آدرس صفحهی دستهبندی که پس از category- میآید، مثل mobile-phone یا notebook-netbook-ultrabook. اسلاگهای قدیمی/کلی («laptop» یکی از آنها بود) دیگر با دستهی واقعی محصولها یکی نیستند؛ چنین نتایجی همینجا حذف میشوند تا محصول نامرتبط برنگردد. با عبارت جستوجو هم ترکیب میشود تا فقط در همان دسته جستوجو کند."
},
"includeSpecs": {
"type": "boolean",
"title": "شامل مشخصات فنی",
"default": true,
"description": "جدول مشخصات فنی هر محصول را در فیلد specs میگذارد. درخواست اضافهای ندارد؛ خاموش کردنش فقط خروجی را کوچکتر میکند.",
"sectionCaption": "جزئیات خروجی"
},
"onlyAvailable": {
"type": "boolean",
"title": "فقط کالاهای موجود",
"default": false,
"description": "اگر روشن باشد، فقط محصولهایی که الان فروشندهی فعال دارند (قابل خرید) برمیگردند."
},
"includeReviews": {
"type": "boolean",
"title": "شامل نظرها",
"default": false,
"description": "نظرهای هر محصول را بهصورت ردیفهای جداگانه با itemType=review برمیگرداند (هر ۲۰ نظر یک صفحهی اضافه). نام نویسنده ذخیره نمیشود."
},
"includeSellers": {
"type": "boolean",
"title": "شامل فهرست فروشندگان",
"default": false,
"description": "همهی فروشندگان هر محصول را با قیمت، گارانتی و امتیازشان در فیلد sellers میگذارد. بدون آن فقط فروشندهی پیشفرض (defaultSeller) برمیگردد. درخواست اضافهای ندارد."
},
"includeQuestions": {
"type": "boolean",
"title": "شامل پرسشوپاسخ",
"default": false,
"description": "پرسشهای خریداران و پاسخهایشان را با itemType=question برمیگرداند؛ حداکثر 50 پرسش برای هر محصول (هر ۲۰ پرسش یک صفحهی اضافه). نام پرسشگر ذخیره نمیشود."
},
"maxReviewsPerProduct": {
"type": "integer",
"title": "تعداد نظر برای هر محصول",
"default": 50,
"maximum": 500,
"minimum": 1,
"description": "سقف نظرهایی که برای هر محصول گرفته میشود، مثل ۵۰. فقط با «شامل نظرها» اثر دارد؛ سقف کل ردیفها همچنان «حداکثر تعداد ردیف» است."
}
},
"description": "محصولات دیجیکالا را با عبارت جستوجو، دستهبندی یا آدرس محصول بگیرید: قیمت، تخفیف، موجودی، امتیاز، فروشندگان، مشخصات فنی، نظرها و پرسشها.",
"schemaVersion": 1
}| priceMin | integer | آگهیهای ارزانتر از این قیمت حذف میشوند. به تومان، مثل 300000000 برای ۳۰۰ میلیون. |
| startUrls | array | بهجای عبارت جستوجو و شهر: آدرس یک آگهی (divar.ir/v/…) که همان آگهی را برمیگرداند، یا آدرس صفحهی جستوجو/دستهبندی (divar.ir/s/mashhad/cars) که شهرش به «cities» اضافه میشود. حداکثر 20 آدرس. |
| postedAfter | string | شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. برای اجراهای دورهای: بهجای خواندن دوبارهی همهچیز، وقتی به آگهیهای قدیمیتر از این تاریخ برسد صفحهبندی جستوجو را متوقف میکند. چون ترتیب نتایج دیوار هیچجا «تازهترین اول» تضمین نشده، کمی جلوتر هم میخواند تا آگهی تازهای جا نماند؛ آگهیهای قدیمیتر در خروجی نمیآیند. فقط روی آگهیهای کشفشده از جستوجو اعمال میشود، نه آدرسهای مشخص در «startUrls». |
| includeImages | boolean | خاموش کنید تا فیلد images خالی برگردد؛ صفحهای کمتر باز نمیشود، فقط خروجی کوچکتر میشود. |
| includePhones | boolean | روشن کنید تا شمارهی تماس هر آگهی با حساب دیوارِ خودتان استخراج شود (برای هر آگهی یک صفحهی اضافه). اول باید حساب دیوار خود را از بخش «اتصال حسابها» در داشبورد وصل کنید؛ بدون اتصال فعال، اجرا با خطای connection_required رد میشود. سقف هر اجرا ۲۰۰ شماره است و خودِ دیوار هم سقف روزانه دارد — وقتی به آن برسید، بقیهی ردیفها با phoneStatus برابر limit_reached برمیگردند و اجرا شکست نمیخورد. |
| includeDetails | boolean | روشن: برای هر آگهی یک صفحهی اضافه باز میشود و توضیحات، ویژگیها، تصاویر و موقعیت میآید. خاموش: فقط شناسه و عنوان برمیگردد و اجرا به اندازهی همان صفحات ارزانتر میشود. |
{
"type": "object",
"title": "Divar Scraper",
"required": [],
"properties": {
"query": {
"type": "string",
"title": "عبارت جستوجو",
"editor": "textfield",
"prefill": "پراید",
"description": "همان چیزی که در کادر جستوجوی دیوار مینویسید، مثل «پراید» یا «آپارتمان ۸۵ متری». خالی بگذارید تا همهی آگهیهای شهر و دستهبندی برگردد؛ یا بهجای آن آدرس آگهی یا صفحهی دیوار را در «startUrls» بدهید."
},
"cities": {
"type": "array",
"items": {
"type": "string"
},
"title": "شهرها",
"editor": "stringList",
"prefill": [
"tehran"
],
"description": "اسلاگ شهر از آدرس دیوار: برای divar.ir/s/mashhad بنویسید mashhad. چند شهر با هم مجاز است. خالی یعنی تهران."
},
"filters": {
"type": "object",
"title": "فیلترهای دستهای",
"editor": "json",
"description": "فیلترهای خاص هر دسته که عیناً به API دیوار پاس داده میشوند؛ برای کاربران حرفهای. مثال: {\"brand_model\": {\"repeated_string\": {\"value\": [\"Pride\"]}}}"
},
"category": {
"type": "string",
"title": "دستهبندی",
"editor": "textfield",
"description": "اسلاگ دستهبندی از آدرس دیوار، مثل real-estate، cars یا mobile-phones در divar.ir/s/tehran/mobile-phones. خالی یعنی همهی دستهها."
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"priceMax": {
"type": "integer",
"title": "حداکثر قیمت (تومان)",
"maximum": 1000000000000000,
"minimum": 0,
"description": "آگهیهای گرانتر از این قیمت حذف میشوند. به تومان، مثل 500000000 برای ۵۰۰ میلیون."
},
"priceMin": {
"type": "integer",
"title": "حداقل قیمت (تومان)",
"maximum": 1000000000000000,
"minimum": 0,
"description": "آگهیهای ارزانتر از این قیمت حذف میشوند. به تومان، مثل 300000000 برای ۳۰۰ میلیون.",
"sectionCaption": "فیلترها"
},
"startUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرسهای دیوار",
"editor": "requestListSources",
"description": "بهجای عبارت جستوجو و شهر: آدرس یک آگهی (divar.ir/v/…) که همان آگهی را برمیگرداند، یا آدرس صفحهی جستوجو/دستهبندی (divar.ir/s/mashhad/cars) که شهرش به «cities» اضافه میشود. حداکثر 20 آدرس.",
"sectionCaption": "تنظیمات پیشرفته"
},
"postedAfter": {
"type": "string",
"title": "از این تاریخ به بعد",
"editor": "textfield",
"description": "شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. برای اجراهای دورهای: بهجای خواندن دوبارهی همهچیز، وقتی به آگهیهای قدیمیتر از این تاریخ برسد صفحهبندی جستوجو را متوقف میکند. چون ترتیب نتایج دیوار هیچجا «تازهترین اول» تضمین نشده، کمی جلوتر هم میخواند تا آگهی تازهای جا نماند؛ آگهیهای قدیمیتر در خروجی نمیآیند. فقط روی آگهیهای کشفشده از جستوجو اعمال میشود، نه آدرسهای مشخص در «startUrls»."
},
"includeImages": {
"type": "boolean",
"title": "شامل تصاویر",
"default": true,
"description": "خاموش کنید تا فیلد images خالی برگردد؛ صفحهای کمتر باز نمیشود، فقط خروجی کوچکتر میشود."
},
"includePhones": {
"type": "boolean",
"title": "استخراج شماره تماس — نیازمند اتصال حساب دیوار",
"default": false,
"description": "روشن کنید تا شمارهی تماس هر آگهی با حساب دیوارِ خودتان استخراج شود (برای هر آگهی یک صفحهی اضافه). اول باید حساب دیوار خود را از بخش «اتصال حسابها» در داشبورد وصل کنید؛ بدون اتصال فعال، اجرا با خطای connection_required رد میشود. سقف هر اجرا ۲۰۰ شماره است و خودِ دیوار هم سقف روزانه دارد — وقتی به آن برسید، بقیهی ردیفها با phoneStatus برابر limit_reached برمیگردند و اجرا شکست نمیخورد."
},
"includeDetails": {
"type": "boolean",
"title": "استخراج صفحهی آگهی",
"default": true,
"description": "روشن: برای هر آگهی یک صفحهی اضافه باز میشود و توضیحات، ویژگیها، تصاویر و موقعیت میآید. خاموش: فقط شناسه و عنوان برمیگردد و اجرا به اندازهی همان صفحات ارزانتر میشود.",
"sectionCaption": "جزئیات خروجی"
}
},
"description": "آگهیهای دیوار را با شهر، دستهبندی یا عبارت جستوجو بگیرید: عنوان، توضیحات، قیمت، ودیعه و اجاره، ویژگیها، تصاویر و موقعیت تقریبی.",
"schemaVersion": 1
}| maxImages | integer | ۰ یعنی هیچ. حداکثر 100. آدرس تصاویر (imageUrls) و تاریخ آپلود از صفحهی جزئیات خوانده میشوند، پس این گزینه صفحهی جزئیات را روشن میکند؛ درخواست جدایی برای تصاویر زده نمیشود و خود فایل تصویر دانلود نمیشود. |
| startUrls | array | بهجای جستوجو، آدرس صفحهی مکانهای مشخص در گوگلمپس را بدهید، هر آدرس در یک خط، مثل https://www.google.com/maps/place/?q=place_id:ChIJJQz5EZzKw4kRCZ95UajbyGw. آدرس باید شناسهی مکان (place_id، cid یا fid) داشته باشد؛ لینک کوتاه goo.gl را اول در مرورگر باز کنید و آدرس کامل را بدهید. حداکثر 50 آدرس. برای هر آدرس صفحهی جزئیات همیشه گرفته میشود. |
| maxReviews | integer | ۰ یعنی هیچ نظری. حداکثر 100. نظرها از صفحهی جزئیات خوانده میشوند، پس این گزینه صفحهی جزئیات را هم روشن میکند. گوگل حدود ۵ نظر را همراه صفحه میدهد و عدد بزرگتر بیشتر از آن نمیآورد؛ این گزینه سقف است، نه هدف. گوگل گاهی نظرها را نمیفرستد و اکتور تا 3 بار دوباره میپرسد (در سنجش ما برای ۹ مکان از ۱۰ نظر برگشت)، پس با نظر، هر مکان تا 3 درخواست هزینه دارد. برای نظرهای یک مکان مشخص، اکتور «استخراج نظرهای گوگلمپس» را ببینید. |
| postalCode | string | یک کد پستی، مثل 10001. فقط با «کشور» ترکیب کنید، نه با شهر؛ هر اجرا یک کد. بهجای «محل جستوجو». |
| countryCode | string | کد دوحرفی کشور برای محدود کردن جستوجو، مثل ir یا us — بهجای «محل جستوجو» و همراه شهر/استان/کد پستی. اگر «محل جستوجو» پر باشد، نادیده گرفته میشود. |
| reviewsSort | string | نظرهای هر مکان با این ترتیب برمیگردند و سقف «تعداد نظر» روی همین ترتیب اعمال میشود؛ پیشفرض جدیدترین. توجه: چون گوگل خودش فقط همان حدود ۵ نظر درونخطی صفحه را میدهد (رجوع به توضیح «تعداد نظر»)، این گزینه فقط همان چند نظر را دوباره میچیند و گوگل را برای نظر تازه یا کمستارهی دیگری کوئری نمیزند. |
| autoGeoSplit | object | غیرفعال بهصورت پیشفرض و روی هزینهی اجرا اثر مستقیم دارد؛ فقط وقتی لازم است که یک عبارت در «محل جستوجو»/«محدودهی دلخواه» میتواند بیش از ۱۶۱ تا ۲۰۰ نتیجه داشته باشد — همان سقفی که گوگل برای هر ویوپورت میگذارد (توضیح «حداکثر تعداد مکان برای هر عبارت» را ببینید). روشن کردنش با {"maxTiles": 9} محدوده را به یک شبکهی ثابت تقسیم میکند و هر بخش را جدا جستوجو میکند؛ تعداد بخشها برابر floor(sqrt(maxTiles))² است، یعنی ۴ تا ۸ یک شبکهی ۲×۲ (۴ بخش) میسازد، ۹ یک شبکهی ۳×۳ (۹ بخش)، و 16 — سقف غیرقابلعبور این نسخه — یک شبکهی 4×4 (16 بخش). کمتر از 4 هیچ شکافتی نمیدهد. هزینهی اجرا دقیقاً به همین نسبت زیاد میشود — یک اجرای ۹بخشی حدود ۹ برابر همان اجرای بدون شکافتن هزینه دارد — و این هزینه پیش از اجرا در page_budget محاسبه و نشان داده میشود، نه در میانهی کار. بخشهای همسایه ۱۰٪ همپوشانی دارند تا مکانی که روی مرز دو بخش است از قلم نیفتد؛ چنین مکانی حذف نمیشود، فقط در ردیف دوم isDuplicate=true و duplicateOfPlaceId میخورد — شمردن ردیفهای isDuplicate=true در خروجی نشان میدهد همپوشانی واقعاً کار کرده. فقط روی «عبارتهای جستوجو» اثر دارد؛ برای placeIds/startUrls (که خودشان یک مکان مشخصاند، نه یک محدوده) و بدون هیچکدام از «محل جستوجو»/شهر/استان/کشور/«محدودهی دلخواه» (که یعنی جستوجو در کل جهان) بیاثر است. |
| maxQuestions | integer | ۰ یعنی هیچ. حداکثر 50. پرسشوپاسخهای زیر صفحهی مکان از صفحهی جزئیات خوانده میشوند و آن را روشن میکنند. |
| locationQuery | string | محدودهی جستوجو بهصورت متن آزاد، مثل «تهران، ایران» یا «Berlin, Germany». هرچه سادهتر، بهتر: نام شهر و کشور کافی است. خالی یعنی جستوجو در کل جهان. اگر این پر شود، فیلدهای کشور/استان/شهر/کد پستی در تنظیمات پیشرفته نادیده گرفته میشوند. برای پیدا کردن محل یک درخواست زده میشود. |
| reviewsOrigin | string | گوگل زیر بعضی مکانها (مثل هتلها) نظرهای سایتهای دیگر را هم نشان میدهد؛ «فقط نظرهای خود گوگل» آنها را حذف میکند. |
| searchMatching | string | نام مکان چقدر باید با عبارت جستوجو بخواند. پیشفرض همهی نتایج گوگل؛ دو گزینهی دیگر برای وقتی است که نام یک برند مشخص را جستوجو میکنید و مکانهای مشابه را نمیخواهید. |
| statusCheckOnly | boolean | برای پایش دورهای «شناسههای مکان»/«آدرسهای گوگلمپس» از قبل شناختهشده: فقط نام، مختصات و وضعیت تعطیلی برمیگردد؛ تصویر، نظر، پرسشوپاسخ و لینکهای رزرو/سفارش خاموش میشوند (حتی اگر جدا روشن شده باشند) و نیمی از درخواستهای جزئیات هر مرجع مستقیم (placeId/startUrl) هم حذف میشود — آن درخواست دوم فقط برای تعداد/توزیع نظر و امتیاز دقیقتر بود که این حالت اصلاً نمیخواهد. روی عبارتهای جستوجو اثری ندارد (آنها از ابتدا فقط یک درخواست جزئیات دارند). |
| reviewsStartDate | string | فقط نظرهایی که از این تاریخ به بعد نوشته شدهاند. تاریخ میلادی مثل 2024-05-03، یا بازهی نسبی به انگلیسی مثل «8 days» یا «3 months». خالی یعنی بدون محدودیت. توجه: این فقط همان حدود ۵ نظر درونخطیِ از قبل گرفتهشده را فیلتر میکند؛ اگر هیچکدام از آنها در این بازه نباشند، حتی اگر مکان نظر تازهتری هم روی گوگل داشته باشد، نتیجه صفر میشود — نه اینکه اکتور نظر تازهتری از گوگل بگیرد. |
| skipClosedPlaces | boolean | مکانهایی که گوگل «بهطور دائم تعطیل» یا «بهطور موقت تعطیل» علامت زده حذف شوند. تشخیص از روی برچسب متنی گوگل است؛ فقط با «زبان نتایج» = انگلیسی (en) کار میکند، با زبانهای دیگر (از جمله فارسی) این فیلتر عملاً هیچ مکانی را حذف نمیکند. |
| customGeolocation | object | محدودهی جستوجو به شکل GeoJSON، بهجای «محل جستوجو»: یک Point با radiusKm، مثل {"type": "Point", "coordinates": [51.389, 35.689], "radiusKm": 5}، یا Polygon/MultiPolygon. چندضلعی به مرکز و شعاع کادر محیطیاش تبدیل میشود، چون جستوجوی گوگل محدودهی دایرهای میگیرد. برای این محدوده درخواست مکانیابی زده نمیشود. |
| includeWebResults | boolean | بخش «Web results» پایین صفحهی مکان (عنوان و لینک) در webResults برگردد. |
| placeMinimumStars | string | فقط مکانهایی با امتیاز مساوی یا بالاتر از این مقدار. مکانهای بدون امتیاز هم حذف میشوند. خالی یعنی بدون حداقل. |
| scrapeOrderOnline | boolean | سرویسهای ارسال و بیرونبر متصل به مکان (مثل اسنپفود یا Uber Eats) در bookingLinks برگردد. |
| searchStringsArray | array | همان چیزی که در کادر جستوجوی گوگلمپس مینویسید، هر عبارت در یک خط، مثل «رستوران» یا «کافه». حداکثر 10 عبارت در هر اجرا؛ هر عبارت جداگانه در «محل جستوجو» جستوجو میشود و برای هر مکان یک ردیف برمیگردد. یا بهجای جستوجو، «آدرسهای گوگلمپس» یا «شناسههای مکان» را در تنظیمات پیشرفته بدهید. |
| categoryFilterWords | array | فقط مکانهایی که دستکم یکی از این دستهبندیها را دارند، هر دسته در یک خط و همانطور که گوگل نشان میدهد، مثل «Restaurant» یا «کافه». بسیاری از کسبوکارها دستهبندی خود را درست ثبت نکردهاند، پس این فیلتر ممکن است نتایج درست را هم حذف کند. خالی یعنی همه. |
| reviewsFilterString | string | فقط نظرهایی که این عبارت در متنشان هست، مثل «delivery» یا «قیمت». خالی یعنی همه. این هم فقط روی همان حدود ۵ نظر درونخطی اعمال میشود، نه کل نظرهای مکان روی گوگل. |
| scrapePlaceDetailPage | boolean | برای هر مکان یک درخواست اضافه میزند و توزیع امتیازها، ساعات کاری کامل، امکانات، پلاسکد و توضیح گوگل را میآورد. بدون آن فقط فهرست نتایج (نام، دسته، نشانی، تلفن، سایت، مختصات، امتیاز) برمیگردد. اگر تعداد نظر، تصویر یا پرسشوپاسخ بدهید، خودکار روشن میشود. |
| maxCrawledPlacesPerSearch | integer | سقف تعداد مکانهایی که برای هر عبارت برمیگردد. گوگل 20 مکان در هر صفحه میدهد و به ازای هر 20 مکان یک صفحهی نتایج باز میشود؛ هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود. مجموع همهی عبارتها حداکثر 200 مکان در هر اجرا. این سقف اکتور نیست: گوگل خودش برای یک عبارت روی یک ویوپورت را — صرفنظر از این عدد — جایی بین ۱۶۱ تا ۲۰۰ مکان متوقف میکند و صفحهی بعدی را نمیدهد. اکتور بهصورت پیشفرض محدوده را خودکار به بخشهای کوچکتر نمیشکند؛ برای پوشش یک دستهی پرتراکم در یک شهر بزرگ (که میتواند هزاران نتیجه داشته باشد) یا خودتان چند اجرا با «محدودهی دلخواه» روی نواحی کوچکتر بزنید، یا در تنظیمات پیشرفته «شکافتن خودکار محدوده» را روشن کنید. |
| scrapeReviewsPersonalData | boolean | نام، شناسه، آدرس پروفایل و عکس نویسندهی نظر (فیلدهای name، reviewerId، reviewerUrl و reviewerPhotoUrl) برگردد. شناسهی خود نظر (reviewId) مستقل از این گزینه همیشه برمیگردد. ⚠️ دادهی شخصی است؛ مسئولیت استفاده و انطباق با قوانین حفاظت از داده با شماست. |
| scrapeTableReservationProvider | boolean | برای رستورانهایی که دکمهی رزرو دارند، نام و لینک سرویس رزرو در tableReservationLinks برگردد. |
{
"type": "object",
"title": "Google Maps Scraper",
"required": [],
"properties": {
"city": {
"type": "string",
"title": "شهر",
"editor": "textfield",
"description": "فقط نام شهر، مثل «تهران» یا «Boston»؛ نام استان و کشور را اینجا ننویسید و در فیلد خودشان بدهید. بهجای «محل جستوجو»."
},
"state": {
"type": "string",
"title": "استان",
"editor": "textfield",
"description": "نام استان یا ایالت، مثل «تهران» یا «Massachusetts». بهجای «محل جستوجو»."
},
"county": {
"type": "string",
"title": "شهرستان",
"editor": "textfield",
"description": "نام شهرستان یا ناحیه، مثل «شمیرانات». بهجای «محل جستوجو»."
},
"website": {
"enum": [
"allPlaces",
"withWebsite",
"withoutWebsite"
],
"type": "string",
"title": "فیلتر وبسایت",
"editor": "select",
"default": "allPlaces",
"enumTitles": [
"همهی مکانها",
"فقط دارای وبسایت",
"فقط بدون وبسایت"
],
"description": "فقط مکانهای دارای وبسایت، یا فقط مکانهای بدون وبسایت برگردند. پیشفرض همه."
},
"language": {
"enum": [
"en",
"af",
"az",
"id",
"ms",
"bs",
"ca",
"cs",
"da",
"de",
"et",
"es",
"es-419",
"eu",
"fil",
"fr",
"gl",
"hr",
"zu",
"is",
"it",
"sw",
"lv",
"lt",
"hu",
"nl",
"no",
"uz",
"pl",
"pt-BR",
"pt-PT",
"ro",
"sq",
"sk",
"sl",
"fi",
"sv",
"vi",
"tr",
"el",
"bg",
"ky",
"kk",
"mk",
"mn",
"ru",
"sr",
"uk",
"ka",
"hy",
"iw",
"ur",
"ar",
"fa",
"am",
"ne",
"hi",
"mr",
"bn",
"pa",
"gu",
"ta",
"te",
"kn",
"ml",
"si",
"th",
"lo",
"my",
"km",
"ko",
"ja",
"zh-CN",
"zh-TW"
],
"type": "string",
"title": "زبان نتایج",
"editor": "select",
"default": "en",
"prefill": "fa",
"enumTitles": [
"انگلیسی (en)",
"آفریکانس (af)",
"آذربایجانی (az)",
"اندونزیایی (id)",
"مالایی (ms)",
"بوسنیایی (bs)",
"کاتالان (ca)",
"چکی (cs)",
"دانمارکی (da)",
"آلمانی (de)",
"استونیایی (et)",
"اسپانیایی (es)",
"اسپانیایی (آمریکای لاتین) (es-419)",
"باسکی (eu)",
"فیلیپینی (fil)",
"فرانسوی (fr)",
"گالیسیایی (gl)",
"کرواتی (hr)",
"زولو (zu)",
"آیسلندی (is)",
"ایتالیایی (it)",
"سواحیلی (sw)",
"لتونیایی (lv)",
"لیتوانیایی (lt)",
"مجاری (hu)",
"هلندی (nl)",
"نروژی (no)",
"ازبکی (uz)",
"لهستانی (pl)",
"پرتغالی (برزیل) (pt-BR)",
"پرتغالی (پرتغال) (pt-PT)",
"رومانیایی (ro)",
"آلبانیایی (sq)",
"اسلواکی (sk)",
"اسلوونیایی (sl)",
"فنلاندی (fi)",
"سوئدی (sv)",
"ویتنامی (vi)",
"ترکی استانبولی (tr)",
"یونانی (el)",
"بلغاری (bg)",
"قرقیزی (ky)",
"قزاقی (kk)",
"مقدونی (mk)",
"مغولی (mn)",
"روسی (ru)",
"صربی (sr)",
"اوکراینی (uk)",
"گرجی (ka)",
"ارمنی (hy)",
"عبری (iw)",
"اردو (ur)",
"عربی (ar)",
"فارسی (fa)",
"امهری (am)",
"نپالی (ne)",
"هندی (hi)",
"مراتی (mr)",
"بنگالی (bn)",
"پنجابی (pa)",
"گجراتی (gu)",
"تامیلی (ta)",
"تلوگو (te)",
"کانارا (kn)",
"مالایالام (ml)",
"سینهالی (si)",
"تایلندی (th)",
"لائوسی (lo)",
"برمهای (my)",
"خمری (km)",
"کرهای (ko)",
"ژاپنی (ja)",
"چینی (سادهشده) (zh-CN)",
"چینی (سنتی) (zh-TW)"
],
"description": "زبانی که گوگل نام، دستهبندی، نشانی و نظرها را به آن برمیگرداند، مثل فارسی (fa) یا انگلیسی (en). فیلدهای «تعطیل دائم/موقت» فقط با انگلیسی (en) قابلاعتمادند: تشخیص از روی برچسب متنی گوگل است و با زبانهای دیگر (از جمله فارسی) عملاً همیشه false میماند."
},
"placeIds": {
"type": "array",
"items": {
"type": "string"
},
"title": "شناسههای مکان",
"editor": "stringList",
"description": "بهجای جستوجو، شناسهی مکان گوگل را بدهید، هر یک در یک خط، مثل ChIJJQz5EZzKw4kRCZ95UajbyGw (با ChIJ یا GhIJ شروع میشود). حداکثر 50 شناسه. هر شناسه یک درخواست اضافه برای تبدیل به شناسهی داخلی گوگل میزند و صفحهی جزئیات آن همیشه گرفته میشود."
},
"maxImages": {
"type": "integer",
"title": "تعداد تصویر برای هر مکان",
"default": 0,
"maximum": 100,
"minimum": 0,
"description": "۰ یعنی هیچ. حداکثر 100. آدرس تصاویر (imageUrls) و تاریخ آپلود از صفحهی جزئیات خوانده میشوند، پس این گزینه صفحهی جزئیات را روشن میکند؛ درخواست جدایی برای تصاویر زده نمیشود و خود فایل تصویر دانلود نمیشود."
},
"startUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرسهای گوگلمپس",
"editor": "requestListSources",
"description": "بهجای جستوجو، آدرس صفحهی مکانهای مشخص در گوگلمپس را بدهید، هر آدرس در یک خط، مثل https://www.google.com/maps/place/?q=place_id:ChIJJQz5EZzKw4kRCZ95UajbyGw. آدرس باید شناسهی مکان (place_id، cid یا fid) داشته باشد؛ لینک کوتاه goo.gl را اول در مرورگر باز کنید و آدرس کامل را بدهید. حداکثر 50 آدرس. برای هر آدرس صفحهی جزئیات همیشه گرفته میشود."
},
"maxReviews": {
"type": "integer",
"title": "تعداد نظر برای هر مکان",
"default": 0,
"maximum": 100,
"minimum": 0,
"description": "۰ یعنی هیچ نظری. حداکثر 100. نظرها از صفحهی جزئیات خوانده میشوند، پس این گزینه صفحهی جزئیات را هم روشن میکند. گوگل حدود ۵ نظر را همراه صفحه میدهد و عدد بزرگتر بیشتر از آن نمیآورد؛ این گزینه سقف است، نه هدف. گوگل گاهی نظرها را نمیفرستد و اکتور تا 3 بار دوباره میپرسد (در سنجش ما برای ۹ مکان از ۱۰ نظر برگشت)، پس با نظر، هر مکان تا 3 درخواست هزینه دارد. برای نظرهای یک مکان مشخص، اکتور «استخراج نظرهای گوگلمپس» را ببینید."
},
"postalCode": {
"type": "string",
"title": "کد پستی",
"editor": "textfield",
"description": "یک کد پستی، مثل 10001. فقط با «کشور» ترکیب کنید، نه با شهر؛ هر اجرا یک کد. بهجای «محل جستوجو»."
},
"countryCode": {
"type": "string",
"title": "کشور",
"editor": "textfield",
"description": "کد دوحرفی کشور برای محدود کردن جستوجو، مثل ir یا us — بهجای «محل جستوجو» و همراه شهر/استان/کد پستی. اگر «محل جستوجو» پر باشد، نادیده گرفته میشود.",
"sectionCaption": "تنظیمات پیشرفته"
},
"reviewsSort": {
"enum": [
"newest",
"mostRelevant",
"highestRanking",
"lowestRanking"
],
"type": "string",
"title": "ترتیب نظرها",
"editor": "select",
"default": "newest",
"enumTitles": [
"جدیدترین",
"مرتبطترین",
"بیشترین ستاره",
"کمترین ستاره"
],
"description": "نظرهای هر مکان با این ترتیب برمیگردند و سقف «تعداد نظر» روی همین ترتیب اعمال میشود؛ پیشفرض جدیدترین. توجه: چون گوگل خودش فقط همان حدود ۵ نظر درونخطی صفحه را میدهد (رجوع به توضیح «تعداد نظر»)، این گزینه فقط همان چند نظر را دوباره میچیند و گوگل را برای نظر تازه یا کمستارهی دیگری کوئری نمیزند."
},
"autoGeoSplit": {
"type": "object",
"title": "شکافتن خودکار محدوده",
"editor": "json",
"description": "غیرفعال بهصورت پیشفرض و روی هزینهی اجرا اثر مستقیم دارد؛ فقط وقتی لازم است که یک عبارت در «محل جستوجو»/«محدودهی دلخواه» میتواند بیش از ۱۶۱ تا ۲۰۰ نتیجه داشته باشد — همان سقفی که گوگل برای هر ویوپورت میگذارد (توضیح «حداکثر تعداد مکان برای هر عبارت» را ببینید). روشن کردنش با {\"maxTiles\": 9} محدوده را به یک شبکهی ثابت تقسیم میکند و هر بخش را جدا جستوجو میکند؛ تعداد بخشها برابر floor(sqrt(maxTiles))² است، یعنی ۴ تا ۸ یک شبکهی ۲×۲ (۴ بخش) میسازد، ۹ یک شبکهی ۳×۳ (۹ بخش)، و 16 — سقف غیرقابلعبور این نسخه — یک شبکهی 4×4 (16 بخش). کمتر از 4 هیچ شکافتی نمیدهد. هزینهی اجرا دقیقاً به همین نسبت زیاد میشود — یک اجرای ۹بخشی حدود ۹ برابر همان اجرای بدون شکافتن هزینه دارد — و این هزینه پیش از اجرا در page_budget محاسبه و نشان داده میشود، نه در میانهی کار. بخشهای همسایه ۱۰٪ همپوشانی دارند تا مکانی که روی مرز دو بخش است از قلم نیفتد؛ چنین مکانی حذف نمیشود، فقط در ردیف دوم isDuplicate=true و duplicateOfPlaceId میخورد — شمردن ردیفهای isDuplicate=true در خروجی نشان میدهد همپوشانی واقعاً کار کرده. فقط روی «عبارتهای جستوجو» اثر دارد؛ برای placeIds/startUrls (که خودشان یک مکان مشخصاند، نه یک محدوده) و بدون هیچکدام از «محل جستوجو»/شهر/استان/کشور/«محدودهی دلخواه» (که یعنی جستوجو در کل جهان) بیاثر است."
},
"maxQuestions": {
"type": "integer",
"title": "تعداد پرسشوپاسخ برای هر مکان",
"default": 0,
"maximum": 50,
"minimum": 0,
"description": "۰ یعنی هیچ. حداکثر 50. پرسشوپاسخهای زیر صفحهی مکان از صفحهی جزئیات خوانده میشوند و آن را روشن میکنند."
},
"locationQuery": {
"type": "string",
"title": "محل جستوجو",
"editor": "textfield",
"prefill": "تهران، ایران",
"description": "محدودهی جستوجو بهصورت متن آزاد، مثل «تهران، ایران» یا «Berlin, Germany». هرچه سادهتر، بهتر: نام شهر و کشور کافی است. خالی یعنی جستوجو در کل جهان. اگر این پر شود، فیلدهای کشور/استان/شهر/کد پستی در تنظیمات پیشرفته نادیده گرفته میشوند. برای پیدا کردن محل یک درخواست زده میشود."
},
"reviewsOrigin": {
"enum": [
"all",
"google"
],
"type": "string",
"title": "منبع نظرها",
"editor": "select",
"default": "all",
"enumTitles": [
"همهی منابع",
"فقط نظرهای خود گوگل"
],
"description": "گوگل زیر بعضی مکانها (مثل هتلها) نظرهای سایتهای دیگر را هم نشان میدهد؛ «فقط نظرهای خود گوگل» آنها را حذف میکند."
},
"searchMatching": {
"enum": [
"all",
"only_includes",
"only_exact"
],
"type": "string",
"title": "سختگیری در تطبیق نام",
"editor": "select",
"default": "all",
"enumTitles": [
"همهی نتایج گوگل",
"فقط مکانهایی که عبارت در نامشان هست",
"فقط مکانهایی که نامشان دقیقاً همان عبارت است"
],
"description": "نام مکان چقدر باید با عبارت جستوجو بخواند. پیشفرض همهی نتایج گوگل؛ دو گزینهی دیگر برای وقتی است که نام یک برند مشخص را جستوجو میکنید و مکانهای مشابه را نمیخواهید."
},
"statusCheckOnly": {
"type": "boolean",
"title": "فقط بررسی وضعیت (سبک)",
"default": false,
"description": "برای پایش دورهای «شناسههای مکان»/«آدرسهای گوگلمپس» از قبل شناختهشده: فقط نام، مختصات و وضعیت تعطیلی برمیگردد؛ تصویر، نظر، پرسشوپاسخ و لینکهای رزرو/سفارش خاموش میشوند (حتی اگر جدا روشن شده باشند) و نیمی از درخواستهای جزئیات هر مرجع مستقیم (placeId/startUrl) هم حذف میشود — آن درخواست دوم فقط برای تعداد/توزیع نظر و امتیاز دقیقتر بود که این حالت اصلاً نمیخواهد. روی عبارتهای جستوجو اثری ندارد (آنها از ابتدا فقط یک درخواست جزئیات دارند)."
},
"reviewsStartDate": {
"type": "string",
"title": "نظرها از این تاریخ به بعد",
"editor": "textfield",
"description": "فقط نظرهایی که از این تاریخ به بعد نوشته شدهاند. تاریخ میلادی مثل 2024-05-03، یا بازهی نسبی به انگلیسی مثل «8 days» یا «3 months». خالی یعنی بدون محدودیت. توجه: این فقط همان حدود ۵ نظر درونخطیِ از قبل گرفتهشده را فیلتر میکند؛ اگر هیچکدام از آنها در این بازه نباشند، حتی اگر مکان نظر تازهتری هم روی گوگل داشته باشد، نتیجه صفر میشود — نه اینکه اکتور نظر تازهتری از گوگل بگیرد."
},
"skipClosedPlaces": {
"type": "boolean",
"title": "رد کردن مکانهای تعطیل",
"default": false,
"description": "مکانهایی که گوگل «بهطور دائم تعطیل» یا «بهطور موقت تعطیل» علامت زده حذف شوند. تشخیص از روی برچسب متنی گوگل است؛ فقط با «زبان نتایج» = انگلیسی (en) کار میکند، با زبانهای دیگر (از جمله فارسی) این فیلتر عملاً هیچ مکانی را حذف نمیکند."
},
"customGeolocation": {
"type": "object",
"title": "محدودهی دلخواه (GeoJSON)",
"editor": "json",
"description": "محدودهی جستوجو به شکل GeoJSON، بهجای «محل جستوجو»: یک Point با radiusKm، مثل {\"type\": \"Point\", \"coordinates\": [51.389, 35.689], \"radiusKm\": 5}، یا Polygon/MultiPolygon. چندضلعی به مرکز و شعاع کادر محیطیاش تبدیل میشود، چون جستوجوی گوگل محدودهی دایرهای میگیرد. برای این محدوده درخواست مکانیابی زده نمیشود."
},
"includeWebResults": {
"type": "boolean",
"title": "نتایج وب",
"default": false,
"description": "بخش «Web results» پایین صفحهی مکان (عنوان و لینک) در webResults برگردد."
},
"placeMinimumStars": {
"enum": [
"",
"two",
"twoAndHalf",
"three",
"threeAndHalf",
"four",
"fourAndHalf"
],
"type": "string",
"title": "حداقل امتیاز",
"editor": "select",
"default": "",
"enumTitles": [
"بدون حداقل",
"۲ ستاره و بالاتر",
"۲٫۵ ستاره و بالاتر",
"۳ ستاره و بالاتر",
"۳٫۵ ستاره و بالاتر",
"۴ ستاره و بالاتر",
"۴٫۵ ستاره و بالاتر"
],
"description": "فقط مکانهایی با امتیاز مساوی یا بالاتر از این مقدار. مکانهای بدون امتیاز هم حذف میشوند. خالی یعنی بدون حداقل."
},
"scrapeOrderOnline": {
"type": "boolean",
"title": "لینکهای سفارش آنلاین",
"default": false,
"description": "سرویسهای ارسال و بیرونبر متصل به مکان (مثل اسنپفود یا Uber Eats) در bookingLinks برگردد."
},
"searchStringsArray": {
"type": "array",
"items": {
"type": "string"
},
"title": "عبارتهای جستوجو",
"editor": "stringList",
"prefill": [
"رستوران"
],
"description": "همان چیزی که در کادر جستوجوی گوگلمپس مینویسید، هر عبارت در یک خط، مثل «رستوران» یا «کافه». حداکثر 10 عبارت در هر اجرا؛ هر عبارت جداگانه در «محل جستوجو» جستوجو میشود و برای هر مکان یک ردیف برمیگردد. یا بهجای جستوجو، «آدرسهای گوگلمپس» یا «شناسههای مکان» را در تنظیمات پیشرفته بدهید."
},
"categoryFilterWords": {
"type": "array",
"items": {
"type": "string"
},
"title": "فیلتر دستهبندی",
"editor": "stringList",
"description": "فقط مکانهایی که دستکم یکی از این دستهبندیها را دارند، هر دسته در یک خط و همانطور که گوگل نشان میدهد، مثل «Restaurant» یا «کافه». بسیاری از کسبوکارها دستهبندی خود را درست ثبت نکردهاند، پس این فیلتر ممکن است نتایج درست را هم حذف کند. خالی یعنی همه.",
"sectionCaption": "فیلترها"
},
"reviewsFilterString": {
"type": "string",
"title": "فیلتر متن نظرها",
"editor": "textarea",
"default": "",
"description": "فقط نظرهایی که این عبارت در متنشان هست، مثل «delivery» یا «قیمت». خالی یعنی همه. این هم فقط روی همان حدود ۵ نظر درونخطی اعمال میشود، نه کل نظرهای مکان روی گوگل."
},
"scrapePlaceDetailPage": {
"type": "boolean",
"title": "استخراج صفحهی جزئیات هر مکان",
"default": false,
"description": "برای هر مکان یک درخواست اضافه میزند و توزیع امتیازها، ساعات کاری کامل، امکانات، پلاسکد و توضیح گوگل را میآورد. بدون آن فقط فهرست نتایج (نام، دسته، نشانی، تلفن، سایت، مختصات، امتیاز) برمیگردد. اگر تعداد نظر، تصویر یا پرسشوپاسخ بدهید، خودکار روشن میشود.",
"sectionCaption": "جزئیات خروجی"
},
"maxCrawledPlacesPerSearch": {
"type": "integer",
"title": "حداکثر تعداد مکان برای هر عبارت",
"default": 20,
"maximum": 200,
"minimum": 1,
"prefill": 20,
"description": "سقف تعداد مکانهایی که برای هر عبارت برمیگردد. گوگل 20 مکان در هر صفحه میدهد و به ازای هر 20 مکان یک صفحهی نتایج باز میشود؛ هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود. مجموع همهی عبارتها حداکثر 200 مکان در هر اجرا. این سقف اکتور نیست: گوگل خودش برای یک عبارت روی یک ویوپورت را — صرفنظر از این عدد — جایی بین ۱۶۱ تا ۲۰۰ مکان متوقف میکند و صفحهی بعدی را نمیدهد. اکتور بهصورت پیشفرض محدوده را خودکار به بخشهای کوچکتر نمیشکند؛ برای پوشش یک دستهی پرتراکم در یک شهر بزرگ (که میتواند هزاران نتیجه داشته باشد) یا خودتان چند اجرا با «محدودهی دلخواه» روی نواحی کوچکتر بزنید، یا در تنظیمات پیشرفته «شکافتن خودکار محدوده» را روشن کنید."
},
"scrapeReviewsPersonalData": {
"type": "boolean",
"title": "اطلاعات شخصی نویسندهی نظر",
"default": true,
"description": "نام، شناسه، آدرس پروفایل و عکس نویسندهی نظر (فیلدهای name، reviewerId، reviewerUrl و reviewerPhotoUrl) برگردد. شناسهی خود نظر (reviewId) مستقل از این گزینه همیشه برمیگردد. ⚠️ دادهی شخصی است؛ مسئولیت استفاده و انطباق با قوانین حفاظت از داده با شماست."
},
"scrapeTableReservationProvider": {
"type": "boolean",
"title": "لینکهای رزرو میز",
"default": false,
"description": "برای رستورانهایی که دکمهی رزرو دارند، نام و لینک سرویس رزرو در tableReservationLinks برگردد."
}
},
"description": "استخراج کسبوکارها از گوگلمپس: نام، دستهبندی، نشانی، تلفن، وبسایت، مختصات، امتیاز و تعداد نظر، ساعات کاری، امکانات، نظرها و تصاویر. ورودی و خروجی همشکل اکتور compass/crawler-google-places در اپیفای است.",
"schemaVersion": 1
}| strict | boolean | وقتی گوگل بهجای عبارت شما عبارت دیگری را جواب میدهد (مثلاً site: را نادیده میگیرد یا «نتایج برای …» نشان میدهد)، بهجای ردیفهای جایگزین، اجرا با خطای fallback_only یا no_results تمام شود و کردیت آزاد شود. پیشفرض خاموش: ردیفهای خارج از site: حذف و fallback در meta اجرا علامت میخورد. |
| results | integer | چند نتیجه برگردد؛ بین ۱ تا 30. گوگل در هر صفحه حداکثر 10 نتیجه میدهد، پس هر 10 نتیجه یک صفحه است و هر صفحه جداگانه به قیمت پروکسی حساب میشود (۱ تا ۱۰ = یک صفحه، ۱۱ تا ۲۰ = دو صفحه، ۲۱ تا ۳۰ = سه صفحه). گوگل ممکن است کمتر از خواستهی شما برگرداند. |
| language | string | کد دوحرفی زبان رابط و نتایج (پارامتر hl گوگل)، مثل fa برای فارسی، en برای انگلیسی یا ar برای عربی. پیشفرض fa. زبان مرورگر رندر هم با همین تنظیم میشود. |
| exclude_domains | array | ردیفهای این دامنهها (و زیردامنههایشان) حذف شوند، مثل pinterest.com. |
| include_domains | array | فقط ردیفهایی که دامنهشان (یا زیردامنهشان) یکی از اینها باشد برگردند، مثل torob.com. فیلتر سمت برچین است و هزینه را تغییر نمیدهد. |
{
"type": "object",
"title": "Google Search Results",
"required": [
"query"
],
"properties": {
"mode": {
"enum": [
"full",
"lite"
],
"type": "string",
"title": "حالت اجرا",
"default": "full",
"enumTitles": [
"کامل (پیشفرض)",
"ارزان (lite)"
],
"description": "full (پیشفرض): اول پروکسی دیتاسنتر، و اگر گوگل آن را رد کرد تا چهار IP مسکونی از کشورهای مختلف (هلند، سوئیس، فنلاند، آلمان، بریتانیا)؛ هزینهی پایه ۴۰ کردیت. lite: فقط یک تلاش از پروکسی دیتاسنتر و بدون ارتقا — هزینهی پایه 4 کردیت و سقف کل هر اجرا 10 کردیت برای یک صفحه؛ اگر گوگل همان یک تلاش را رد کند اجرا سریع با خطای blocked تمام میشود و کل کردیت آزاد میشود. در حالت lite نتیجهی همان ورودی تا 6 ساعت از کش برمیگردد (فقط هزینهی پایه؛ با fresh: true کش نادیده گرفته میشود)."
},
"page": {
"type": "integer",
"title": "صفحهی شروع",
"default": 1,
"maximum": 3,
"minimum": 1,
"description": "از کدام صفحهی گوگل شروع شود؛ ۱ تا 3. با results بیش از 10، صفحههای بعدی هم به ترتیب خوانده میشوند. position هر ردیف رتبهی سراسری آن است (صفحهی ۲ از ۱۱ شروع میشود)."
},
"fresh": {
"type": "boolean",
"title": "بدون کش",
"default": false,
"description": "فقط در حالت lite معنا دارد: نتیجهی کششده نادیده گرفته و صفحه دوباره خوانده شود."
},
"query": {
"type": "string",
"title": "عبارت جستوجو",
"editor": "textfield",
"prefill": "خرید لپ تاپ",
"description": "همان چیزی که در کادر جستوجوی گوگل مینویسید، مثل «خرید لپ تاپ» یا «web scraping api». عملگرهای گوگل (site:، filetype:، نقلقول) پشتیبانی میشوند. حداکثر ۲۵۶ کاراکتر. برای هر نتیجهی ارگانیک یک ردیف برمیگردد."
},
"region": {
"type": "string",
"title": "کشور نتایج",
"editor": "textfield",
"default": "ir",
"description": "کد دوحرفی کشوری که گوگل نتایج آن را نشان دهد (پارامتر gl گوگل)، مثل ir یا de. پیشفرض ir. این با کشور IP خروجی فرق دارد: IP خروجی در این اکتور ثابت است و پارامتر country روی اجرا نادیده گرفته میشود؛ برای نتایج ایران همین فیلد کافی است."
},
"strict": {
"type": "boolean",
"title": "سختگیر",
"default": false,
"description": "وقتی گوگل بهجای عبارت شما عبارت دیگری را جواب میدهد (مثلاً site: را نادیده میگیرد یا «نتایج برای …» نشان میدهد)، بهجای ردیفهای جایگزین، اجرا با خطای fallback_only یا no_results تمام شود و کردیت آزاد شود. پیشفرض خاموش: ردیفهای خارج از site: حذف و fallback در meta اجرا علامت میخورد."
},
"results": {
"type": "integer",
"title": "تعداد نتایج",
"default": 10,
"maximum": 30,
"minimum": 1,
"description": "چند نتیجه برگردد؛ بین ۱ تا 30. گوگل در هر صفحه حداکثر 10 نتیجه میدهد، پس هر 10 نتیجه یک صفحه است و هر صفحه جداگانه به قیمت پروکسی حساب میشود (۱ تا ۱۰ = یک صفحه، ۱۱ تا ۲۰ = دو صفحه، ۲۱ تا ۳۰ = سه صفحه). گوگل ممکن است کمتر از خواستهی شما برگرداند."
},
"language": {
"type": "string",
"title": "زبان نتایج",
"editor": "textfield",
"default": "fa",
"description": "کد دوحرفی زبان رابط و نتایج (پارامتر hl گوگل)، مثل fa برای فارسی، en برای انگلیسی یا ar برای عربی. پیشفرض fa. زبان مرورگر رندر هم با همین تنظیم میشود.",
"sectionCaption": "تنظیمات پیشرفته"
},
"exclude_domains": {
"type": "array",
"items": {
"type": "string"
},
"title": "بدون این دامنهها",
"editor": "stringList",
"default": [],
"description": "ردیفهای این دامنهها (و زیردامنههایشان) حذف شوند، مثل pinterest.com."
},
"include_domains": {
"type": "array",
"items": {
"type": "string"
},
"title": "فقط این دامنهها",
"editor": "stringList",
"default": [],
"description": "فقط ردیفهایی که دامنهشان (یا زیردامنهشان) یکی از اینها باشد برگردند، مثل torob.com. فیلتر سمت برچین است و هزینه را تغییر نمیدهد."
}
},
"description": "عبارت جستوجو را بدهید تا نتایج ارگانیک گوگل را بهصورت JSON بگیرید.",
"schemaVersion": 2
}| dateFrom | string | فقط خبرهای از این تاریخ به بعد. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2026-09-23)؛ خودکار تشخیص داده میشود. خبرهای بیرون بازه صفحهای باز نمیکنند. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
| categories | array | برای isna، irna، tasnim، khabaronline و hamshahri، شناسهی عددی سرویس — نه اسلاگ متنی — دقیقاً همانطور که صفحهی rss-help خود سایت میدهد (مثل «۱۰» برای اقتصادی)؛ برای digiato شناسهی عددی دسته از /wp-json/wp/v2/categories؛ برای zoomit همان اسلاگ آدرس دسته در سایت (مثل mobile یا car). برای حالت «دستهبندی» الزامی است؛ فقط اولین مورد خوانده میشود. |
| articleUrls | array | آدرس کامل خبر از یکی از منابع پشتیبانیشده، مثل https://www.isna.ir/news/1405070401908/… . برای حالت «آدرس مشخص» الزامی است؛ حداکثر 30 آدرس، هر آدرس یک صفحه. |
| sitemapYear | string | فقط برای حالت «آرشیو sitemap» و فقط برای hamshahri/khabaronline، که آرشیوشان را سالبهسال منتشر میکنند (مثل ۱۳۹۰). خالی یعنی سال جاری. zoomit و digiato مفهوم «سال» ندارند و این فیلد برایشان بیاثر است. سالی که آن سایت دیگر چنین آرشیوی ندارد یا بهجای XML با فرمت قدیمی JSON پاسخ میدهد (هر دو واقعاً روی این سایتها دیده شده)، آن منبع فقط برای این اجرا رد میشود، نه کل اجرا. |
| outputFormat | string | متن خبر بهشکل متن ساده (bodyText)، مارکداون (bodyMarkdown) یا هر دو. فقط وقتی «متن کامل خبر» روشن است اثر دارد. |
| sitemapCursor | object | فقط برای حالت «آرشیو sitemap». شیئی مثل {"zoomit": "5:120"} — مقدار sitemapCursor را از یکی از ردیفهای همان منبع در اجرای قبلی بردارید تا این اجرا دقیقاً از همانجا (نه از ابتدای آرشیو) ادامه بدهد. خالی یعنی از ابتدای آرشیو همان منبع/سال. |
| includeFullText | boolean | صفحهی هر خبر جداگانه باز میشود (هر خبر یک صفحه) و متن کامل در bodyText یا bodyMarkdown میآید. برای ایسنا، ایرنا و تسنیم این کار مرورگر واقعی لازم دارد و هر صفحه گرانتر است. اگر خاموش کنید فقط فید خوانده میشود — تیتر و لید — و اجرا به تعداد منابع صفحه باز میکند. |
{
"type": "object",
"title": "Persian News Scraper",
"required": [],
"properties": {
"mode": {
"enum": [
"latest",
"category",
"search",
"urls",
"sitemap"
],
"type": "string",
"title": "حالت",
"editor": "select",
"default": "latest",
"enumTitles": [
"آخرین اخبار",
"دستهبندی",
"جستوجو",
"آدرس مشخص",
"آرشیو sitemap"
],
"description": "«آخرین اخبار» فید اصلی هر منبع را میخواند؛ «دستهبندی» فید/صفحهی سرویسی را که در بخش فیلترها مینویسید؛ «جستوجو» برای isna، hamshahri و digiato صفحهی جستوجوی واقعی همان سایت را میخواند، و برای irna، khabaronline، zoomit و tasnim — که جستوجو را در robots.txt خودشان بستهاند یا نتایجش را فقط با جاوااسکریپت میسازند — بهجای آن آخرین اخبار را میگیرد و با «عبارت جستوجو» فیلتر میکند؛ «آدرس مشخص» فقط خبرهایی را که در تنظیمات پیشرفته میدهید؛ «آرشیو sitemap» فید را کنار میگذارد و آرشیو تاریخی واقعی sitemap XML سایت را میخواند — فقط برای hamshahri، khabaronline، zoomit، digiato (توضیح کامل در پایین فرم)."
},
"query": {
"type": "string",
"title": "عبارت جستوجو",
"editor": "textfield",
"description": "برای isna، hamshahri و digiato عبارتی که به موتور جستوجوی خود همان سایت داده میشود؛ برای بقیهی منابع عبارتی که باید در تیتر، لید یا متن خبر باشد. برای حالت «جستوجو» الزامی است."
},
"dateTo": {
"type": "string",
"title": "تا تاریخ",
"editor": "textfield",
"description": "فقط خبرهای تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۴/۰۷/۳۰."
},
"sources": {
"type": "array",
"items": {
"enum": [
"isna",
"irna",
"tasnim",
"khabaronline",
"hamshahri",
"zoomit",
"digiato"
],
"type": "string"
},
"title": "منابع",
"editor": "stringList",
"prefill": [
"isna",
"irna",
"khabaronline"
],
"description": "کد خبرگزاریها: isna (ایسنا)، irna (ایرنا)، tasnim (تسنیم)، khabaronline (خبرآنلاین)، hamshahri (همشهری آنلاین)، zoomit (زومیت) و digiato (دیجیاتو). خالی یعنی ایسنا، ایرنا و خبرآنلاین — یا برای حالت «sitemap»، hamshahri، khabaronline، zoomit، digiato. هر منبع یک صفحهی فید باز میکند."
},
"dateFrom": {
"type": "string",
"title": "از تاریخ",
"editor": "textfield",
"description": "فقط خبرهای از این تاریخ به بعد. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2026-09-23)؛ خودکار تشخیص داده میشود. خبرهای بیرون بازه صفحهای باز نمیکنند."
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"title": "دستهبندیها",
"editor": "stringList",
"description": "برای isna، irna، tasnim، khabaronline و hamshahri، شناسهی عددی سرویس — نه اسلاگ متنی — دقیقاً همانطور که صفحهی rss-help خود سایت میدهد (مثل «۱۰» برای اقتصادی)؛ برای digiato شناسهی عددی دسته از /wp-json/wp/v2/categories؛ برای zoomit همان اسلاگ آدرس دسته در سایت (مثل mobile یا car). برای حالت «دستهبندی» الزامی است؛ فقط اولین مورد خوانده میشود.",
"sectionCaption": "فیلترها"
},
"articleUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرس خبرها",
"editor": "requestListSources",
"description": "آدرس کامل خبر از یکی از منابع پشتیبانیشده، مثل https://www.isna.ir/news/1405070401908/… . برای حالت «آدرس مشخص» الزامی است؛ حداکثر 30 آدرس، هر آدرس یک صفحه.",
"sectionCaption": "تنظیمات پیشرفته"
},
"sitemapYear": {
"type": "string",
"title": "سال sitemap (شمسی)",
"editor": "textfield",
"description": "فقط برای حالت «آرشیو sitemap» و فقط برای hamshahri/khabaronline، که آرشیوشان را سالبهسال منتشر میکنند (مثل ۱۳۹۰). خالی یعنی سال جاری. zoomit و digiato مفهوم «سال» ندارند و این فیلد برایشان بیاثر است. سالی که آن سایت دیگر چنین آرشیوی ندارد یا بهجای XML با فرمت قدیمی JSON پاسخ میدهد (هر دو واقعاً روی این سایتها دیده شده)، آن منبع فقط برای این اجرا رد میشود، نه کل اجرا."
},
"outputFormat": {
"enum": [
"text",
"markdown",
"both"
],
"type": "string",
"title": "قالب متن",
"editor": "select",
"default": "markdown",
"enumTitles": [
"متن ساده",
"مارکداون",
"هر دو"
],
"description": "متن خبر بهشکل متن ساده (bodyText)، مارکداون (bodyMarkdown) یا هر دو. فقط وقتی «متن کامل خبر» روشن است اثر دارد."
},
"sitemapCursor": {
"type": "object",
"title": "ادامه از کجا (sitemapCursor)",
"editor": "json",
"description": "فقط برای حالت «آرشیو sitemap». شیئی مثل {\"zoomit\": \"5:120\"} — مقدار sitemapCursor را از یکی از ردیفهای همان منبع در اجرای قبلی بردارید تا این اجرا دقیقاً از همانجا (نه از ابتدای آرشیو) ادامه بدهد. خالی یعنی از ابتدای آرشیو همان منبع/سال."
},
"includeFullText": {
"type": "boolean",
"title": "متن کامل خبر",
"default": true,
"description": "صفحهی هر خبر جداگانه باز میشود (هر خبر یک صفحه) و متن کامل در bodyText یا bodyMarkdown میآید. برای ایسنا، ایرنا و تسنیم این کار مرورگر واقعی لازم دارد و هر صفحه گرانتر است. اگر خاموش کنید فقط فید خوانده میشود — تیتر و لید — و اجرا به تعداد منابع صفحه باز میکند.",
"sectionCaption": "جزئیات خروجی"
}
},
"description": "اخبار فارسی از چند خبرگزاری، با یک ساختار خروجی مشترک.",
"schemaVersion": 1
}| priceMax | integer | آگهیهای گرانتر از این قیمت حذف میشوند. به تومان، مثل 500000000 برای ۵۰۰ میلیون. |
| priceMin | integer | آگهیهای ارزانتر از این قیمت حذف میشوند. به تومان، مثل 300000000 برای ۳۰۰ میلیون. |
| startUrls | array | بهجای عبارت جستوجو و شهر: آدرس یک آگهی (sheypoor.com/v/…-467373008.html) که همان آگهی را برمیگرداند، یا آدرس صفحهی جستوجو (sheypoor.com/s/tehran/vehicles) که شهر و دستهبندیاش برداشته میشود. حداکثر 20 آدرس. |
| includeImages | boolean | خاموش کنید تا فیلد images خالی برگردد؛ صفحهای کمتر باز نمیشود، فقط خروجی کوچکتر میشود. |
| includeDetails | boolean | روشن: برای هر آگهی یک صفحهی اضافه باز میشود و متن آگهی و تصاویر بزرگ میآید. خاموش: قیمت، محله و ویژگیها از خود فهرست نتایج میآیند و اجرا به اندازهی همان صفحات ارزانتر تمام میشود. |
{
"type": "object",
"title": "Sheypoor Scraper",
"required": [],
"properties": {
"query": {
"type": "string",
"title": "عبارت جستوجو",
"editor": "textfield",
"prefill": "پراید",
"description": "همان چیزی که در کادر جستوجوی شیپور مینویسید، مثل «پراید» یا «یخچال». خالی بگذارید تا همهی آگهیهای شهر و دستهبندی برگردد؛ یا بهجای آن آدرس شیپور را در «startUrls» بدهید."
},
"cities": {
"type": "array",
"items": {
"type": "string"
},
"title": "شهرها",
"editor": "stringList",
"prefill": [
"tehran"
],
"description": "اسلاگ شهر از آدرس شیپور: برای sheypoor.com/s/mashhad بنویسید mashhad. هر شهر جدا جستوجو و نتایجش با هم ادغام میشود. خالی یعنی بدون فیلتر شهر (همهی ایران). توجه: فیلتر شهر شیپور قاطع نیست؛ چند درصد آگهی از شهرها و استانهای اطراف هم در نتایج میآید."
},
"filters": {
"type": "object",
"title": "فیلترهای دستهای",
"editor": "json",
"description": "پارامترهای اضافی که عیناً به آدرس جستوجوی شیپور اضافه میشوند؛ برای کاربران حرفهای. همان کلید و مقدارهایی که بعد از انتخاب یک فیلتر در آدرس صفحهی شیپور ظاهر میشوند، به شکل {\"کلید\": \"مقدار\"}."
},
"category": {
"type": "string",
"title": "دستهبندی",
"editor": "textfield",
"description": "اسلاگ دستهبندی از آدرس شیپور، مثل vehicles یا real-estate در sheypoor.com/s/tehran/real-estate. برای زیردستهها هم همینطور: آدرس همان زیردسته را در شیپور باز کنید و اسلاگ انتهای آن را بردارید، مثل mobile-tablet در sheypoor.com/s/tehran/mobile-tablet. خالی یعنی همهی دستهها."
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"priceMax": {
"type": "integer",
"title": "حداکثر قیمت (تومان)",
"maximum": 1000000000000000,
"minimum": 0,
"description": "آگهیهای گرانتر از این قیمت حذف میشوند. به تومان، مثل 500000000 برای ۵۰۰ میلیون."
},
"priceMin": {
"type": "integer",
"title": "حداقل قیمت (تومان)",
"maximum": 1000000000000000,
"minimum": 0,
"description": "آگهیهای ارزانتر از این قیمت حذف میشوند. به تومان، مثل 300000000 برای ۳۰۰ میلیون.",
"sectionCaption": "فیلترها"
},
"startUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"title": "آدرسهای شیپور",
"editor": "requestListSources",
"description": "بهجای عبارت جستوجو و شهر: آدرس یک آگهی (sheypoor.com/v/…-467373008.html) که همان آگهی را برمیگرداند، یا آدرس صفحهی جستوجو (sheypoor.com/s/tehran/vehicles) که شهر و دستهبندیاش برداشته میشود. حداکثر 20 آدرس.",
"sectionCaption": "تنظیمات پیشرفته"
},
"includeImages": {
"type": "boolean",
"title": "شامل تصاویر",
"default": true,
"description": "خاموش کنید تا فیلد images خالی برگردد؛ صفحهای کمتر باز نمیشود، فقط خروجی کوچکتر میشود."
},
"includeDetails": {
"type": "boolean",
"title": "استخراج صفحهی آگهی",
"default": true,
"description": "روشن: برای هر آگهی یک صفحهی اضافه باز میشود و متن آگهی و تصاویر بزرگ میآید. خاموش: قیمت، محله و ویژگیها از خود فهرست نتایج میآیند و اجرا به اندازهی همان صفحات ارزانتر تمام میشود.",
"sectionCaption": "جزئیات خروجی"
}
},
"description": "آگهیهای شیپور را با شهر، دستهبندی یا عبارت جستوجو بگیرید. خروجی دقیقاً همان قرارداد اکتور دیوار است، فقط «platform» برابر sheypoor میشود.",
"schemaVersion": 1
}| includeNames | boolean | ستونهای nameFa/nameEn را پر میکند — فقط برای طلا، سکه و ارز ایرانی (فید زندهی TGJU هیچ فیلد نامی ندارد؛ اینها از فهرست دستهبندی سایت خزیده میشوند). رمزارز، نفت، فلزات، ارز جهانی و شاخص بورس پوشش داده نمیشوند و همچنان null میمانند. هزینهی این خزش یکباره (حداکثر 15 درخواست) ثابت است، نه بهازای ابزار — و روی هر پردازهی کارگر فقط یکبار انجام و برای اجراهای بعدی همان پردازه کش میشود. |
| includeHistory | boolean | تاریخچهی روزانهی هر ابزار را هم برمیگرداند (ردیفهایی با itemType=history). برای هر ابزار یک صفحهی اضافه باز میکند؛ وقتی فقط «دسته» داده باشید، حداکثر برای 100 ابزار. با چند ابزار همزمان، سقف «حداکثر تعداد ردیف» بهطور مساوی بین ابزارها تقسیم میشود؛ اگر سهم یک ابزار از تاریخچهی واقعیاش کمتر بود، ردیفهای آن ابزار truncated=true میگیرند. |
| includeOpenPrice | boolean | ستون open را در ردیفهای price با نرخ واقعی بازگشایی امروز پر میکند — از لیست نوسانهای لحظهای TGJU (نه فید زنده که این عدد را ندارد). با هزینهی دو درخواست اضافه بهازای هر ابزار (همان قاعدهی شمارش ابزار «شامل تاریخچه»: ابزارهای نامبردهشده، یا وقتی فقط «دسته» داده شده تا سقف 100 ابزار). |
{
"type": "object",
"title": "TGJU Price Scraper",
"required": [],
"properties": {
"dateTo": {
"type": "string",
"title": "تاریخچه تا",
"editor": "textfield",
"description": "فقط با «شامل تاریخچه»: ردیفهای روزانه تا این تاریخ. شمسی یا میلادی."
},
"dateFrom": {
"type": "string",
"title": "تاریخچه از",
"editor": "textfield",
"description": "فقط با «شامل تاریخچه»: ردیفهای روزانه از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود.",
"sectionCaption": "فیلترها"
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
},
"categories": {
"type": "array",
"items": {
"enum": [
"gold",
"coin",
"currency",
"crypto",
"oil",
"metals",
"stock_index"
],
"type": "string"
},
"title": "دستهها",
"editor": "stringList",
"description": "بهجای نام بردن تکتک ابزارها، همهی ابزارهای یک دسته را بگیرید: gold (طلا)، coin (سکه)، currency (ارز)، crypto (رمزارز)، oil (نفت)، metals (فلزات) یا stock_index (شاخص بورس). تا سقف «حداکثر تعداد ردیف» پر میشود. این تشخیص فقط حدود ۲۱۳ از ۹۶۳ ابزار فید TGJU را میپوشاند؛ برای بقیه اسلاگ دقیق را در «ابزارها» بدهید."
},
"instruments": {
"type": "array",
"items": {
"type": "string"
},
"title": "ابزارها",
"editor": "stringList",
"prefill": [
"geram18",
"sekee",
"price_dollar_rl"
],
"description": "اسلاگ صفحهی ابزار در TGJU — همان بخش آخر آدرس tgju.org/profile/…؛ مثل geram18 (طلای ۱۸ عیار)، sekee (سکهی امامی) یا price_dollar_rl (دلار). حداکثر 100 مورد. یا بهجای نام بردن، یک «دسته» را بدهید. اسلاگی که در فهرست TGJU نباشد صفر ردیف نمیگیرد؛ یک ردیف itemType=notFound برایش برمیگردد."
},
"includeNames": {
"type": "boolean",
"title": "نام فارسی و انگلیسی ابزار",
"default": false,
"description": "ستونهای nameFa/nameEn را پر میکند — فقط برای طلا، سکه و ارز ایرانی (فید زندهی TGJU هیچ فیلد نامی ندارد؛ اینها از فهرست دستهبندی سایت خزیده میشوند). رمزارز، نفت، فلزات، ارز جهانی و شاخص بورس پوشش داده نمیشوند و همچنان null میمانند. هزینهی این خزش یکباره (حداکثر 15 درخواست) ثابت است، نه بهازای ابزار — و روی هر پردازهی کارگر فقط یکبار انجام و برای اجراهای بعدی همان پردازه کش میشود."
},
"includeHistory": {
"type": "boolean",
"title": "شامل تاریخچه",
"default": false,
"description": "تاریخچهی روزانهی هر ابزار را هم برمیگرداند (ردیفهایی با itemType=history). برای هر ابزار یک صفحهی اضافه باز میکند؛ وقتی فقط «دسته» داده باشید، حداکثر برای 100 ابزار. با چند ابزار همزمان، سقف «حداکثر تعداد ردیف» بهطور مساوی بین ابزارها تقسیم میشود؛ اگر سهم یک ابزار از تاریخچهی واقعیاش کمتر بود، ردیفهای آن ابزار truncated=true میگیرند.",
"sectionCaption": "جزئیات خروجی"
},
"includeOpenPrice": {
"type": "boolean",
"title": "نرخ بازگشایی امروز",
"default": false,
"description": "ستون open را در ردیفهای price با نرخ واقعی بازگشایی امروز پر میکند — از لیست نوسانهای لحظهای TGJU (نه فید زنده که این عدد را ندارد). با هزینهی دو درخواست اضافه بهازای هر ابزار (همان قاعدهی شمارش ابزار «شامل تاریخچه»: ابزارهای نامبردهشده، یا وقتی فقط «دسته» داده شده تا سقف 100 ابزار)."
}
},
"description": "نرخ لحظهای طلا، سکه، ارز، رمزارز، نفت و فلزات از TGJU، بههمراه تاریخچهی روزانه.",
"schemaVersion": 1
}| dateFrom | string | برای تاریخچه، حقیقی و حقوقی و شاخص: فقط روزهای از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود. |
| maxItems | integer | سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000. |
{
"type": "object",
"title": "TSETMC Scraper",
"required": [],
"properties": {
"dateTo": {
"type": "string",
"title": "تا تاریخ",
"editor": "textfield",
"description": "فقط روزهای تا این تاریخ. شمسی یا میلادی، مثل ۱۴۰۵/۰۷/۰۱."
},
"markets": {
"type": "array",
"items": {
"enum": [
"bourse",
"farabourse",
"base"
],
"type": "string"
},
"title": "بازارها",
"editor": "stringList",
"description": "فقط برای «دیدهبان کل بازار»: bourse (بورس)، farabourse (فرابورس) یا base (بازار پایه). خالی یعنی همهی تابلو.",
"sectionCaption": "فیلترها"
},
"symbols": {
"type": "array",
"items": {
"type": "string"
},
"title": "نمادها",
"editor": "stringList",
"prefill": [
"فولاد"
],
"description": "نماد فارسی همانطور که در تابلو نوشته میشود، مثل «فولاد» یا «خودرو»، یا insCode ۱۷ رقمی (رزولوشن نماد را حذف میکند و یک درخواست کمتر میزند). حداکثر 50 نماد؛ سقف «حداکثر تعداد ردیف» بین نمادهای «تاریخچه» و «حقیقی و حقوقی» بهطور مساوی تقسیم میشود، نه اینکه اولی همه را ببلعد. برای «شاخص» شناسهی شاخص را بدهید (خالی یعنی شاخص کل)؛ برای «دیدهبان کل بازار» لازم نیست."
},
"adjusted": {
"type": "boolean",
"title": "قیمت تعدیلشده",
"default": false,
"description": "روشن: فقط آخرین روز با قیمت تعدیلشده (با احتساب افزایش سرمایه و سود نقدی) — endpoint تعدیلشدهی خودِ TSETMC آرشیو تاریخی ندارد و همیشه دقیقاً همین یک ردیف را میدهد؛ این محدودیت خودِ سایت است. خاموش (پیشفرض): آرشیو کامل قیمت خام روزانه از اولین روز معاملهی نماد. برای «تاریخچهی روزانه» با بیش از یک ردیف، خاموش بگذارید.",
"sectionCaption": "تنظیمات پیشرفته"
},
"dataType": {
"enum": [
"snapshot",
"price",
"history",
"client_type",
"orderbook",
"index",
"market_watch"
],
"type": "string",
"title": "نوع داده",
"editor": "select",
"default": "snapshot",
"enumTitles": [
"وضعیت لحظهای کامل",
"قیمت لحظهای (سبک)",
"تاریخچهی روزانه",
"حقیقی و حقوقی",
"عمق بازار",
"شاخص",
"دیدهبان کل بازار"
],
"description": "چه چیزی برگردد: وضعیت لحظهای کامل هر نماد با نام و ISIN و صنعت (۴ درخواست بهازای هر نماد، ~۶۰ کردیت روی پروکسی مسکونی)، قیمت لحظهای سبک بدون اطلاعات شرکت برای پایش پرتکرار (۲ درخواست بهازای هر نماد)، تاریخچهی روزانه (یک ردیف برای هر روز)، خرید و فروش حقیقی و حقوقی به تفکیک روز، عمق بازار (مظنههای برتر)، مقدار شاخص، یا دیدهبان کل بازار (همهی نمادها با یک درخواست، بدون نیاز به نماد). نمادی که پیدا نشود بهجای حذف بیصدا، ردیفی با itemType=notFound برمیگرداند."
},
"dateFrom": {
"type": "string",
"title": "از تاریخ",
"editor": "textfield",
"description": "برای تاریخچه، حقیقی و حقوقی و شاخص: فقط روزهای از این تاریخ. شمسی (۱۴۰۴/۰۷/۰۱) یا میلادی (2025-09-23)؛ خودکار تشخیص داده میشود."
},
"maxItems": {
"type": "integer",
"title": "حداکثر تعداد ردیف",
"default": 20,
"maximum": 1000,
"minimum": 1,
"description": "سقف ردیفهای خروجی این اجرا. هر چه بیشتر، صفحات بیشتری باز و کردیت بیشتری کسر میشود؛ برآورد هزینه را زیر فرم ببینید. حداکثر 1000."
}
},
"description": "دادههای بورس تهران از سرویس رسمی TSETMC: وضعیت لحظهای، قیمت لحظهای سبک، تاریخچه، حقیقی/حقوقی، عمق بازار، شاخص و دیدهبان کل بازار. همهی قیمتها به ریال است. اطلاعیههای کدال و ترکیب/NAV صندوقها اینجا نیست — بهترتیب از codal-scraper و fipiran-funds-scraper استفاده کنید.",
"schemaVersion": 1
}| boolean |
| Fetch a file instead of a page: accept a non-HTML body (a PDF datasheet, an image, an archive, up to 15 MB) that would otherwise fail with unsupported_content_type. Implies render_js=false (sending render_js=true with it is an error). The result then has content=null and instead carries content_type, size_bytes and a download_url that streams the file with the same API key as Authorization: Bearer — the bytes are never inlined over MCP. Useful for hosts that block the caller's own IP: a 403 escalates to a residential IP. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The absolute http(s) URL to fetch."
},
"proxy": {
"enum": [
"auto",
"datacenter",
"residential",
"unblocker"
],
"type": "string",
"default": "auto",
"description": "Proxy pool. auto (default) escalates from the cheapest pool only as needed and charges only for the tier that worked. datacenter=1 credit, residential=15, unblocker=25 (each +5 with render_js)."
},
"format": {
"enum": [
"markdown",
"text",
"html"
],
"type": "string",
"default": "markdown",
"description": "Output format. markdown/text are derived from the fetched HTML at read time, at no extra cost."
},
"country": {
"type": "string",
"description": "Two-letter ISO country code for the exit IP, e.g. 'ir'. Omit for worldwide."
},
"wait_for": {
"type": "string",
"description": "CSS selector to wait for after the page loads, before reading the content. Only valid with render_js=true."
},
"max_chars": {
"type": "integer",
"default": 40000,
"minimum": 1,
"description": "Truncate markdown/text output to this many characters."
},
"render_js": {
"type": "boolean",
"default": true,
"description": "Render the page in a real browser (JavaScript/SPA content). Costs +5 credits; turn off for plain HTML pages to save credits."
},
"accept_binary": {
"type": "boolean",
"default": false,
"description": "Fetch a file instead of a page: accept a non-HTML body (a PDF datasheet, an image, an archive, up to 15 MB) that would otherwise fail with unsupported_content_type. Implies render_js=false (sending render_js=true with it is an error). The result then has content=null and instead carries content_type, size_bytes and a download_url that streams the file with the same API key as Authorization: Bearer — the bytes are never inlined over MCP. Useful for hosts that block the caller's own IP: a 403 escalates to a residential IP."
}
}
}