getanyapi 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. getanyapi/__init__.py +76 -0
  2. getanyapi/_account.py +132 -0
  3. getanyapi/_async_client.py +215 -0
  4. getanyapi/_client.py +274 -0
  5. getanyapi/_errors.py +115 -0
  6. getanyapi/_pagination.py +295 -0
  7. getanyapi/_transport.py +239 -0
  8. getanyapi/platforms/__init__.py +89 -0
  9. getanyapi/platforms/ahrefs.py +384 -0
  10. getanyapi/platforms/airbnb.py +120 -0
  11. getanyapi/platforms/alibaba.py +95 -0
  12. getanyapi/platforms/amazon.py +442 -0
  13. getanyapi/platforms/appstore.py +95 -0
  14. getanyapi/platforms/bluesky.py +215 -0
  15. getanyapi/platforms/booking.py +128 -0
  16. getanyapi/platforms/coinmarketcap.py +113 -0
  17. getanyapi/platforms/congress.py +106 -0
  18. getanyapi/platforms/dexscreener.py +104 -0
  19. getanyapi/platforms/ebay.py +215 -0
  20. getanyapi/platforms/email.py +166 -0
  21. getanyapi/platforms/facebook.py +2324 -0
  22. getanyapi/platforms/fiverr.py +122 -0
  23. getanyapi/platforms/github.py +954 -0
  24. getanyapi/platforms/glassdoor.py +93 -0
  25. getanyapi/platforms/google.py +232 -0
  26. getanyapi/platforms/google_ads.py +380 -0
  27. getanyapi/platforms/google_finance.py +170 -0
  28. getanyapi/platforms/google_shopping.py +103 -0
  29. getanyapi/platforms/hackernews.py +276 -0
  30. getanyapi/platforms/indeed.py +114 -0
  31. getanyapi/platforms/instagram.py +1868 -0
  32. getanyapi/platforms/linkedin.py +1064 -0
  33. getanyapi/platforms/maps.py +412 -0
  34. getanyapi/platforms/pandaexpress.py +262 -0
  35. getanyapi/platforms/person.py +96 -0
  36. getanyapi/platforms/pinterest.py +96 -0
  37. getanyapi/platforms/playstore.py +99 -0
  38. getanyapi/platforms/polymarket.py +109 -0
  39. getanyapi/platforms/realtor.py +104 -0
  40. getanyapi/platforms/reddit.py +582 -0
  41. getanyapi/platforms/redfin.py +95 -0
  42. getanyapi/platforms/rednote.py +807 -0
  43. getanyapi/platforms/sec.py +118 -0
  44. getanyapi/platforms/semrush.py +358 -0
  45. getanyapi/platforms/snapchat.py +146 -0
  46. getanyapi/platforms/social.py +105 -0
  47. getanyapi/platforms/spotify.py +588 -0
  48. getanyapi/platforms/substack.py +142 -0
  49. getanyapi/platforms/threads.py +358 -0
  50. getanyapi/platforms/tiktok.py +1827 -0
  51. getanyapi/platforms/tiktok_shop.py +536 -0
  52. getanyapi/platforms/tripadvisor.py +180 -0
  53. getanyapi/platforms/trustpilot.py +114 -0
  54. getanyapi/platforms/truthsocial.py +226 -0
  55. getanyapi/platforms/twitter.py +798 -0
  56. getanyapi/platforms/upwork.py +119 -0
  57. getanyapi/platforms/walmart.py +93 -0
  58. getanyapi/platforms/web.py +264 -0
  59. getanyapi/platforms/whatsapp.py +91 -0
  60. getanyapi/platforms/yahoo_finance.py +95 -0
  61. getanyapi/platforms/yelp.py +141 -0
  62. getanyapi/platforms/youtube.py +1452 -0
  63. getanyapi/platforms/zillow.py +218 -0
  64. getanyapi/py.typed +0 -0
  65. getanyapi/types.py +170 -0
  66. getanyapi-0.1.0.dist-info/METADATA +155 -0
  67. getanyapi-0.1.0.dist-info/RECORD +68 -0
  68. getanyapi-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,442 @@
1
+ # Generated - do not edit. Regenerate with: pnpm generate
2
+ """Generated namespace module for the amazon platform."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from typing import Literal, TYPE_CHECKING
7
+
8
+ from pydantic import BaseModel, ConfigDict, Field
9
+ from typing_extensions import NotRequired, Required, TypedDict, Unpack
10
+
11
+ from ..types import RequestOptions, RunResult
12
+
13
+ if TYPE_CHECKING:
14
+ from .._async_client import AsyncAnyAPI
15
+ from .._client import AnyAPI
16
+
17
+
18
+ class AmazonAsinsInput(TypedDict, total=False):
19
+ """Input for Amazon Products by ASIN."""
20
+
21
+ amazonDomain: NotRequired[str]
22
+ """Amazon marketplace domain to fetch products from (e.g. amazon.com, amazon.de, amazon.co.uk). Default: amazon.com."""
23
+ asins: Required[list[str]]
24
+ """Up to 10 Amazon ASINs to look up (e.g. ["B0CHX1W1XY", "B09G9FPHY6"])."""
25
+ limit: NotRequired[int]
26
+ """Maximum number of results to return (1-10, default 10). You are billed per result returned, so a lower limit costs less. Range: 1 to 10."""
27
+
28
+
29
+ class AmazonBestsellersInput(TypedDict, total=False):
30
+ """Input for Amazon Bestsellers."""
31
+
32
+ limit: NotRequired[int]
33
+ """Maximum number of results to return (1-20, default 20). You are billed per result returned, so a lower limit costs less. Range: 1 to 20."""
34
+ url: Required[str]
35
+ """Amazon Best Sellers category URL (e.g. https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics)."""
36
+
37
+
38
+ class AmazonProductInput(TypedDict, total=False):
39
+ """Input for Amazon Product."""
40
+
41
+ url: Required[str]
42
+ """Full Amazon product URL (e.g. https://www.amazon.com/dp/B0CX23V2ZK)."""
43
+
44
+
45
+ class AmazonReviewsInput(TypedDict, total=False):
46
+ """Input for Amazon Reviews."""
47
+
48
+ limit: NotRequired[int]
49
+ """Maximum number of results to return (1-50, default 50). You are billed per result returned, so a lower limit costs less. Range: 1 to 50."""
50
+ product: Required[str]
51
+ """Amazon product ASIN or full product URL (e.g. B07CMS5Q6P)."""
52
+ region: NotRequired[
53
+ Literal[
54
+ "amazon.com",
55
+ "amazon.ca",
56
+ "amazon.de",
57
+ "amazon.fr",
58
+ "amazon.co.uk",
59
+ "amazon.it",
60
+ "amazon.es",
61
+ "amazon.com.au",
62
+ "amazon.co.jp",
63
+ "amazon.com.br",
64
+ "amazon.com.mx",
65
+ "amazon.nl",
66
+ "amazon.ie",
67
+ "amazon.se",
68
+ "amazon.com.tr",
69
+ "amazon.ae",
70
+ "amazon.sg",
71
+ "amazon.sa",
72
+ "amazon.pl",
73
+ "amazon.com.be",
74
+ "amazon.eg",
75
+ "amazon.in",
76
+ ]
77
+ ]
78
+ """Amazon marketplace domain the product ASIN belongs to (e.g. amazon.co.uk). Default: amazon.com."""
79
+ sort: NotRequired[Literal["helpful", "recent"]]
80
+ """Review sort order: most helpful first or most recent first (e.g. recent). Default: helpful."""
81
+
82
+
83
+ class AmazonSearchInput(TypedDict, total=False):
84
+ """Input for Amazon Search."""
85
+
86
+ limit: NotRequired[int]
87
+ """Maximum number of results to return (1-20, default 20). You are billed per result returned, so a lower limit costs less. Range: 1 to 20."""
88
+ url: Required[str]
89
+ """Amazon search or category URL to pull results from (e.g. https://www.amazon.com/s?k=gaming+mouse)."""
90
+
91
+
92
+ class AmazonAsinsData(BaseModel):
93
+ items: list[AmazonAsinsItem] = Field(
94
+ description="Product records: ASIN, title, brand, price, ratings, images, and attributes."
95
+ )
96
+
97
+
98
+ class AmazonAsinsItem(BaseModel):
99
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
100
+
101
+ asin: str = Field(description="Amazon Standard Identification Number.")
102
+ brand: str | None = Field(
103
+ default=None, description="Present whenever the upstream returns this record."
104
+ )
105
+ condition: str | None = None
106
+ currency: str | None = None
107
+ image: str | None = Field(
108
+ default=None,
109
+ description="Primary product image URL. Present whenever the upstream returns this record.",
110
+ )
111
+ in_stock: bool | None = Field(default=None, alias="inStock")
112
+ price: float | None = Field(
113
+ default=None, description="Buy-box price; 0 when no offer is available."
114
+ )
115
+ rating: float | None = Field(default=None, description="Average star rating, 0-5.")
116
+ reviews_count: int | None = Field(default=None, alias="reviewsCount")
117
+ seller_name: str | None = Field(default=None, alias="sellerName")
118
+ title: str
119
+ url: str
120
+
121
+
122
+ class AmazonBestsellersData(BaseModel):
123
+ items: list[AmazonBestsellersItem] = Field(
124
+ description="Best-seller product records: category rank, title, price, rating, thumbnail, and product URL."
125
+ )
126
+
127
+
128
+ class AmazonBestsellersItem(BaseModel):
129
+ model_config = ConfigDict(extra="allow")
130
+
131
+ asin: str
132
+ title: str
133
+ url: str
134
+
135
+
136
+ class AmazonProductData(BaseModel):
137
+ items: list[AmazonProductItem] = Field(
138
+ description="Product detail records: title, url, asin, brand, price amount (when in stock), images, rating, review count, and (passed through) variant details and attributes."
139
+ )
140
+
141
+
142
+ class AmazonProductItem(BaseModel):
143
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
144
+
145
+ asin: str
146
+ brand: str | None = Field(
147
+ default=None,
148
+ description="Manufacturer or brand name. Present whenever the upstream returns this record.",
149
+ )
150
+ images: list[str] | None = Field(
151
+ default=None,
152
+ description="High-resolution product image URLs. Present whenever the upstream returns this record.",
153
+ )
154
+ price_amount: float | None = Field(
155
+ default=None,
156
+ alias="priceAmount",
157
+ description="Current price as a numeric amount. Absent when the listing has no buyable price (out of stock).",
158
+ )
159
+ rating: float | None = Field(
160
+ default=None, description="Average customer star rating, 0 to 5."
161
+ )
162
+ review_count: int | None = Field(
163
+ default=None,
164
+ alias="reviewCount",
165
+ description="Total number of customer reviews.",
166
+ )
167
+ title: str
168
+ url: str
169
+
170
+
171
+ class AmazonReviewsData(BaseModel):
172
+ items: list[AmazonReviewsItem] = Field(
173
+ description="Customer review records: star rating, title, review text, date, reviewer, and verified-purchase status."
174
+ )
175
+
176
+
177
+ class AmazonReviewsItem(BaseModel):
178
+ model_config = ConfigDict(extra="allow")
179
+
180
+ rating: float
181
+ text: str
182
+
183
+
184
+ class AmazonSearchData(BaseModel):
185
+ items: list[AmazonSearchItem] = Field(
186
+ description="Search result product records: title, ASIN, price amount, currency, rating, review count, and thumbnail."
187
+ )
188
+
189
+
190
+ class AmazonSearchItem(BaseModel):
191
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
192
+
193
+ asin: str
194
+ currency: str | None = Field(
195
+ default=None, description="Currency symbol or code for the price."
196
+ )
197
+ price_amount: float | None = Field(
198
+ default=None,
199
+ alias="priceAmount",
200
+ description="Current price as a numeric amount.",
201
+ )
202
+ rating: float | None = Field(default=None, description="Average star rating.")
203
+ review_count: int | None = Field(
204
+ default=None, alias="reviewCount", description="Number of customer reviews."
205
+ )
206
+ thumbnail: str | None = Field(
207
+ default=None,
208
+ description="Product thumbnail image URL. Present whenever the upstream returns this record.",
209
+ )
210
+ title: str
211
+
212
+
213
+ class AmazonNamespace:
214
+ """Typed methods for this platform. Attached lazily to the client."""
215
+
216
+ def __init__(self, client: "AnyAPI") -> None:
217
+ self._client = client
218
+
219
+ def asins(
220
+ self,
221
+ *,
222
+ options: RequestOptions | None = None,
223
+ **input: Unpack[AmazonAsinsInput],
224
+ ) -> RunResult[AmazonAsinsData]:
225
+ """Amazon Products by ASIN
226
+
227
+ Look up to 10 Amazon products in one call by ASIN - title, brand, price,
228
+ ratings, images, and attributes - as normalized JSON with flat per-request
229
+ USD pricing.
230
+
231
+ Price: $0.0035 per asin.
232
+
233
+ Example:
234
+ res = client.amazon.asins(asins=["B09G9FPHY6"], limit=3)
235
+ """
236
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
237
+ "amazon.asins", dict(input), options
238
+ )
239
+ return RunResult[AmazonAsinsData].model_validate(raw)
240
+
241
+ def bestsellers(
242
+ self,
243
+ *,
244
+ options: RequestOptions | None = None,
245
+ **input: Unpack[AmazonBestsellersInput],
246
+ ) -> RunResult[AmazonBestsellersData]:
247
+ """Amazon Bestsellers
248
+
249
+ List the top-ranked products of any Amazon Best Sellers category - rank,
250
+ title, price, and rating - in one normalized, flat-priced request.
251
+
252
+ Price: $0.0041 per result.
253
+
254
+ Example:
255
+ res = client.amazon.bestsellers(limit=3, url="https://www.amazon.com/gp/bestsellers/electronics")
256
+ """
257
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
258
+ "amazon.bestsellers", dict(input), options
259
+ )
260
+ return RunResult[AmazonBestsellersData].model_validate(raw)
261
+
262
+ def product(
263
+ self,
264
+ *,
265
+ options: RequestOptions | None = None,
266
+ **input: Unpack[AmazonProductInput],
267
+ ) -> RunResult[AmazonProductData]:
268
+ """Amazon Product
269
+
270
+ Fetch full Amazon product details (title, brand, price when in stock,
271
+ images, ratings, review count, variants, and attributes) from a product URL,
272
+ with transparent per-request USD pricing.
273
+
274
+ Price: $0.001 per request plus $0.0081 per result.
275
+
276
+ Example:
277
+ res = client.amazon.product(url="https://www.amazon.com/dp/B00NTCH52W")
278
+ """
279
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
280
+ "amazon.product", dict(input), options
281
+ )
282
+ return RunResult[AmazonProductData].model_validate(raw)
283
+
284
+ def reviews(
285
+ self,
286
+ *,
287
+ options: RequestOptions | None = None,
288
+ **input: Unpack[AmazonReviewsInput],
289
+ ) -> RunResult[AmazonReviewsData]:
290
+ """Amazon Reviews
291
+
292
+ Pull up to 50 customer reviews for any Amazon product by ASIN or URL -
293
+ rating, title, text, date, and verified-purchase badge - at a flat
294
+ per-request USD price.
295
+
296
+ Price: $0.01625 per request.
297
+
298
+ Example:
299
+ res = client.amazon.reviews(limit=3, product="B07FZ8S74R")
300
+ """
301
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
302
+ "amazon.reviews", dict(input), options
303
+ )
304
+ return RunResult[AmazonReviewsData].model_validate(raw)
305
+
306
+ def search(
307
+ self,
308
+ *,
309
+ options: RequestOptions | None = None,
310
+ **input: Unpack[AmazonSearchInput],
311
+ ) -> RunResult[AmazonSearchData]:
312
+ """Amazon Search
313
+
314
+ Search Amazon from any search or category URL and get up to 20 matching
315
+ products - title, price, rating, and thumbnail - in one normalized,
316
+ flat-priced response.
317
+
318
+ Price: $0.0035 per result.
319
+
320
+ Example:
321
+ res = client.amazon.search(limit=3, url="https://www.amazon.com/s?k=laptop")
322
+ """
323
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
324
+ "amazon.search", dict(input), options
325
+ )
326
+ return RunResult[AmazonSearchData].model_validate(raw)
327
+
328
+
329
+ class AsyncAmazonNamespace:
330
+ """Typed methods for this platform. Attached lazily to the client."""
331
+
332
+ def __init__(self, client: "AsyncAnyAPI") -> None:
333
+ self._client = client
334
+
335
+ async def asins(
336
+ self,
337
+ *,
338
+ options: RequestOptions | None = None,
339
+ **input: Unpack[AmazonAsinsInput],
340
+ ) -> RunResult[AmazonAsinsData]:
341
+ """Amazon Products by ASIN
342
+
343
+ Look up to 10 Amazon products in one call by ASIN - title, brand, price,
344
+ ratings, images, and attributes - as normalized JSON with flat per-request
345
+ USD pricing.
346
+
347
+ Price: $0.0035 per asin.
348
+
349
+ Example:
350
+ res = client.amazon.asins(asins=["B09G9FPHY6"], limit=3)
351
+ """
352
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
353
+ "amazon.asins", dict(input), options
354
+ )
355
+ return RunResult[AmazonAsinsData].model_validate(raw)
356
+
357
+ async def bestsellers(
358
+ self,
359
+ *,
360
+ options: RequestOptions | None = None,
361
+ **input: Unpack[AmazonBestsellersInput],
362
+ ) -> RunResult[AmazonBestsellersData]:
363
+ """Amazon Bestsellers
364
+
365
+ List the top-ranked products of any Amazon Best Sellers category - rank,
366
+ title, price, and rating - in one normalized, flat-priced request.
367
+
368
+ Price: $0.0041 per result.
369
+
370
+ Example:
371
+ res = client.amazon.bestsellers(limit=3, url="https://www.amazon.com/gp/bestsellers/electronics")
372
+ """
373
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
374
+ "amazon.bestsellers", dict(input), options
375
+ )
376
+ return RunResult[AmazonBestsellersData].model_validate(raw)
377
+
378
+ async def product(
379
+ self,
380
+ *,
381
+ options: RequestOptions | None = None,
382
+ **input: Unpack[AmazonProductInput],
383
+ ) -> RunResult[AmazonProductData]:
384
+ """Amazon Product
385
+
386
+ Fetch full Amazon product details (title, brand, price when in stock,
387
+ images, ratings, review count, variants, and attributes) from a product URL,
388
+ with transparent per-request USD pricing.
389
+
390
+ Price: $0.001 per request plus $0.0081 per result.
391
+
392
+ Example:
393
+ res = client.amazon.product(url="https://www.amazon.com/dp/B00NTCH52W")
394
+ """
395
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
396
+ "amazon.product", dict(input), options
397
+ )
398
+ return RunResult[AmazonProductData].model_validate(raw)
399
+
400
+ async def reviews(
401
+ self,
402
+ *,
403
+ options: RequestOptions | None = None,
404
+ **input: Unpack[AmazonReviewsInput],
405
+ ) -> RunResult[AmazonReviewsData]:
406
+ """Amazon Reviews
407
+
408
+ Pull up to 50 customer reviews for any Amazon product by ASIN or URL -
409
+ rating, title, text, date, and verified-purchase badge - at a flat
410
+ per-request USD price.
411
+
412
+ Price: $0.01625 per request.
413
+
414
+ Example:
415
+ res = client.amazon.reviews(limit=3, product="B07FZ8S74R")
416
+ """
417
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
418
+ "amazon.reviews", dict(input), options
419
+ )
420
+ return RunResult[AmazonReviewsData].model_validate(raw)
421
+
422
+ async def search(
423
+ self,
424
+ *,
425
+ options: RequestOptions | None = None,
426
+ **input: Unpack[AmazonSearchInput],
427
+ ) -> RunResult[AmazonSearchData]:
428
+ """Amazon Search
429
+
430
+ Search Amazon from any search or category URL and get up to 20 matching
431
+ products - title, price, rating, and thumbnail - in one normalized,
432
+ flat-priced response.
433
+
434
+ Price: $0.0035 per result.
435
+
436
+ Example:
437
+ res = client.amazon.search(limit=3, url="https://www.amazon.com/s?k=laptop")
438
+ """
439
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
440
+ "amazon.search", dict(input), options
441
+ )
442
+ return RunResult[AmazonSearchData].model_validate(raw)
@@ -0,0 +1,95 @@
1
+ # Generated - do not edit. Regenerate with: pnpm generate
2
+ """Generated namespace module for the appstore platform."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from typing import TYPE_CHECKING
7
+
8
+ from pydantic import BaseModel, ConfigDict, Field
9
+ from typing_extensions import NotRequired, Required, TypedDict, Unpack
10
+
11
+ from ..types import RequestOptions, RunResult
12
+
13
+ if TYPE_CHECKING:
14
+ from .._async_client import AsyncAnyAPI
15
+ from .._client import AnyAPI
16
+
17
+
18
+ class AppstoreReviewsInput(TypedDict, total=False):
19
+ """Input for App Store Reviews."""
20
+
21
+ appId: Required[str]
22
+ """Numeric App Store app ID, the digits at the end of the app's store URL without the 'id' prefix (e.g. 310633997)."""
23
+ country: NotRequired[str]
24
+ """Two-letter App Store storefront country code to read reviews from. Default: us."""
25
+ limit: NotRequired[int]
26
+ """Maximum number of results to return (1-100, default 100). You are billed per result returned, so a lower limit costs less. Range: 1 to 100."""
27
+
28
+
29
+ class AppstoreReviewsData(BaseModel):
30
+ items: list[AppstoreReviewsItem] = Field(
31
+ description="Review records: star rating, review title and text, reviewer nickname, app version, and review date."
32
+ )
33
+
34
+
35
+ class AppstoreReviewsItem(BaseModel):
36
+ model_config = ConfigDict(extra="allow")
37
+
38
+ rating: float
39
+ text: str
40
+
41
+
42
+ class AppstoreNamespace:
43
+ """Typed methods for this platform. Attached lazily to the client."""
44
+
45
+ def __init__(self, client: "AnyAPI") -> None:
46
+ self._client = client
47
+
48
+ def reviews(
49
+ self,
50
+ *,
51
+ options: RequestOptions | None = None,
52
+ **input: Unpack[AppstoreReviewsInput],
53
+ ) -> RunResult[AppstoreReviewsData]:
54
+ """App Store Reviews
55
+
56
+ Get App Store reviews for any iOS app by app ID, in any storefront country -
57
+ ratings, titles, and review text with transparent per-request USD pricing.
58
+
59
+ Price: $0.0001 per result.
60
+
61
+ Example:
62
+ res = client.appstore.reviews(appId="389801252", country="us", limit=3)
63
+ """
64
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
65
+ "appstore.reviews", dict(input), options
66
+ )
67
+ return RunResult[AppstoreReviewsData].model_validate(raw)
68
+
69
+
70
+ class AsyncAppstoreNamespace:
71
+ """Typed methods for this platform. Attached lazily to the client."""
72
+
73
+ def __init__(self, client: "AsyncAnyAPI") -> None:
74
+ self._client = client
75
+
76
+ async def reviews(
77
+ self,
78
+ *,
79
+ options: RequestOptions | None = None,
80
+ **input: Unpack[AppstoreReviewsInput],
81
+ ) -> RunResult[AppstoreReviewsData]:
82
+ """App Store Reviews
83
+
84
+ Get App Store reviews for any iOS app by app ID, in any storefront country -
85
+ ratings, titles, and review text with transparent per-request USD pricing.
86
+
87
+ Price: $0.0001 per result.
88
+
89
+ Example:
90
+ res = client.appstore.reviews(appId="389801252", country="us", limit=3)
91
+ """
92
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
93
+ "appstore.reviews", dict(input), options
94
+ )
95
+ return RunResult[AppstoreReviewsData].model_validate(raw)