getanyapi 0.96.0__tar.gz → 0.97.1__tar.gz

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 (109) hide show
  1. {getanyapi-0.96.0 → getanyapi-0.97.1}/PKG-INFO +1 -1
  2. {getanyapi-0.96.0 → getanyapi-0.97.1}/pyproject.toml +1 -1
  3. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/douyin.py +2 -2
  5. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/email.py +2 -2
  6. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/seo.py +89 -50
  7. {getanyapi-0.96.0 → getanyapi-0.97.1}/.gitignore +0 -0
  8. {getanyapi-0.96.0 → getanyapi-0.97.1}/README.md +0 -0
  9. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_account.py +0 -0
  10. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_async_client.py +0 -0
  11. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_client.py +0 -0
  12. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_errors.py +0 -0
  13. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_idempotency.py +0 -0
  14. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_pagination.py +0 -0
  15. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/_transport.py +0 -0
  16. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/discovery_types.py +0 -0
  17. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/__init__.py +0 -0
  18. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/ahrefs.py +0 -0
  19. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/airbnb.py +0 -0
  20. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/alibaba.py +0 -0
  21. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/amazon.py +0 -0
  22. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/apollo.py +0 -0
  23. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/appstore.py +0 -0
  24. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/bluesky.py +0 -0
  25. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/booking.py +0 -0
  26. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/capterra.py +0 -0
  27. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/chatgpt.py +0 -0
  28. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  29. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/company.py +0 -0
  30. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/company_enrichment.py +0 -0
  31. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/company_identify.py +0 -0
  32. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/company_search.py +0 -0
  33. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/congress.py +0 -0
  34. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  35. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/ebay.py +0 -0
  36. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/email_finding.py +0 -0
  37. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/email_verification.py +0 -0
  38. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/facebook.py +0 -0
  39. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/fiverr.py +0 -0
  40. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/g2.py +0 -0
  41. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/gemini.py +0 -0
  42. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/github.py +0 -0
  43. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/glassdoor.py +0 -0
  44. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/google.py +0 -0
  45. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/google_ads.py +0 -0
  46. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/google_finance.py +0 -0
  47. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/google_hotels.py +0 -0
  48. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/google_shopping.py +0 -0
  49. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/hackernews.py +0 -0
  50. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/indeed.py +0 -0
  51. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/instagram.py +0 -0
  52. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/job_search.py +0 -0
  53. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/linkedin.py +0 -0
  54. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/maps.py +0 -0
  55. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/mobile_phone.py +0 -0
  56. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/naver.py +0 -0
  57. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/nextdoor.py +0 -0
  58. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/people_search.py +0 -0
  59. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/perplexity.py +0 -0
  60. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/person.py +0 -0
  61. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/person_enrichment.py +0 -0
  62. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/pexels.py +0 -0
  63. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/pinterest.py +0 -0
  64. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/playstore.py +0 -0
  65. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/polymarket.py +0 -0
  66. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/property_records.py +0 -0
  67. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/realtor.py +0 -0
  68. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/reddit.py +0 -0
  69. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/redfin.py +0 -0
  70. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/rednote.py +0 -0
  71. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/sec.py +0 -0
  72. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/semrush.py +0 -0
  73. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/similarweb.py +0 -0
  74. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/snapchat.py +0 -0
  75. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/social.py +0 -0
  76. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/spotify.py +0 -0
  77. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/substack.py +0 -0
  78. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/technographics.py +0 -0
  79. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/threads.py +0 -0
  80. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/tiktok.py +0 -0
  81. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  82. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/tripadvisor.py +0 -0
  83. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/trustpilot.py +0 -0
  84. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/truthsocial.py +0 -0
  85. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/twitter.py +0 -0
  86. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/unsplash.py +0 -0
  87. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/upwork.py +0 -0
  88. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/walmart.py +0 -0
  89. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/web.py +0 -0
  90. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/weibo.py +0 -0
  91. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  92. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/yelp.py +0 -0
  93. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/youtube.py +0 -0
  94. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/zhihu.py +0 -0
  95. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/platforms/zillow.py +0 -0
  96. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/py.typed +0 -0
  97. {getanyapi-0.96.0 → getanyapi-0.97.1}/src/getanyapi/types.py +0 -0
  98. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/conftest.py +0 -0
  99. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_account.py +0 -0
  100. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_client.py +0 -0
  101. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_durable_requests.py +0 -0
  102. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_envelope.py +0 -0
  103. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_errors.py +0 -0
  104. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_fixture_roundtrip.py +0 -0
  105. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_fixture_sweep.py +0 -0
  106. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_not_found_reason.py +0 -0
  107. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_pagination.py +0 -0
  108. {getanyapi-0.96.0 → getanyapi-0.97.1}/tests/test_transport.py +0 -0
  109. {getanyapi-0.96.0 → getanyapi-0.97.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.96.0
3
+ Version: 0.97.1
4
4
  Summary: Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions.
5
5
  Project-URL: Homepage, https://getanyapi.com
6
6
  Project-URL: Documentation, https://getanyapi.com/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "getanyapi"
7
- version = "0.96.0"
7
+ version = "0.97.1"
8
8
  description = "Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -55,7 +55,7 @@ from .types import (
55
55
  unwrap,
56
56
  )
57
57
 
58
- __version__ = "0.96.0"
58
+ __version__ = "0.97.1"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -459,7 +459,7 @@ class DouyinNamespace:
459
459
  Price: $0.0012 per request.
460
460
 
461
461
  Example:
462
- res = client.douyin.profile(secUserId="MS4wLjABAAAAW9FWcqS7RdQAWPd2AA5fL_ilmqsIFUCQ_Iym6Yh9_cUa6ZRqVLjVQSUjlHrfXY1Y")
462
+ res = client.douyin.profile(secUserId="MS4wLjABAAAANXSltcLCzDGmdNFI2Q_QixVTr67NiYzjKOIP5s03CAE")
463
463
  """
464
464
  raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
465
465
  "douyin.profile", dict(input), options
@@ -570,7 +570,7 @@ class AsyncDouyinNamespace:
570
570
  Price: $0.0012 per request.
571
571
 
572
572
  Example:
573
- res = client.douyin.profile(secUserId="MS4wLjABAAAAW9FWcqS7RdQAWPd2AA5fL_ilmqsIFUCQ_Iym6Yh9_cUa6ZRqVLjVQSUjlHrfXY1Y")
573
+ res = client.douyin.profile(secUserId="MS4wLjABAAAANXSltcLCzDGmdNFI2Q_QixVTr67NiYzjKOIP5s03CAE")
574
574
  """
575
575
  raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
576
576
  "douyin.profile", dict(input), options
@@ -121,7 +121,7 @@ class EmailNamespace:
121
121
 
122
122
  Find a person's work email address from their name and company domain.
123
123
 
124
- Price: $0.0308 per request.
124
+ Price: $0.0154 per request.
125
125
 
126
126
  Example:
127
127
  res = client.email.find(person={"domain": "google.com", "firstName": "Damien", "surname": "Neil"})
@@ -169,7 +169,7 @@ class AsyncEmailNamespace:
169
169
 
170
170
  Find a person's work email address from their name and company domain.
171
171
 
172
- Price: $0.0308 per request.
172
+ Price: $0.0154 per request.
173
173
 
174
174
  Example:
175
175
  res = client.email.find(person={"domain": "google.com", "firstName": "Damien", "surname": "Neil"})
@@ -449,24 +449,40 @@ class SeoLlmTopPagesInput(TypedDict, total=False):
449
449
 
450
450
 
451
451
  class SeoLocalPackInput(TypedDict, total=False):
452
- """Input for SEO Local Pack."""
452
+ """Input for Google Local Pack."""
453
453
 
454
454
  allowFallbacks: NotRequired[bool]
455
455
  """Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
456
456
  ignoreSources: NotRequired[list[str]]
457
457
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
458
458
  keyword: Required[str]
459
- """SEO local pack search keyword."""
459
+ """Search keyword, for example coffee shop or plumber."""
460
460
  language: NotRequired[str]
461
- """Language code for SEO local pack results. Default: en."""
461
+ """Language code for the search results. Default: en."""
462
462
  limit: NotRequired[int]
463
- """Maximum number of local pack places to return. Billing is flat per request. Range: 1 to 100. Default: 20."""
464
- location: NotRequired[str]
465
- """Local pack search location name, formatted like City,Region,Country; for example, New York,New York,United States. Supply either location or locationCoordinate, not both."""
466
- locationCoordinate: NotRequired[str]
467
- """Precise geo target as latitude,longitude or latitude,longitude,radius (radius in meters); for example, 40.7580,-73.9855 or 40.7580,-73.9855,1000. Supply either location or locationCoordinate, not both."""
463
+ """Maximum number of local pack businesses to return. Google usually shows three. Billing is flat per request. Range: 1 to 100."""
464
+ location: Required[str]
465
+ """Location to search from, formatted like City,Region,Country; for example, New York,New York,United States."""
468
466
  preferLatencyUnderMs: NotRequired[int]
469
467
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
468
+ requireFields: NotRequired[
469
+ list[
470
+ Literal[
471
+ "address",
472
+ "bookingUrl",
473
+ "category",
474
+ "cid",
475
+ "description",
476
+ "directionsUrl",
477
+ "hours",
478
+ "image",
479
+ "knowledgeGraphId",
480
+ "priceLevel",
481
+ "rankGroup",
482
+ ]
483
+ ]
484
+ ]
485
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `address` or `cid`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a business that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
470
486
  source: NotRequired[list[str]]
471
487
  """Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
472
488
 
@@ -2991,7 +3007,7 @@ class SeoLlmTopPagesSearchResultDomain(BaseModel):
2991
3007
 
2992
3008
  class SeoLocalPackData(BaseModel):
2993
3009
  places: list[SeoLocalPackPlace] = Field(
2994
- description="SEO local pack place records. Populated whenever the provider has data for the entity."
3010
+ description="Businesses in the Google local pack, in the order Google shows them. Populated whenever the provider has data for the entity."
2995
3011
  )
2996
3012
 
2997
3013
 
@@ -3000,66 +3016,83 @@ class SeoLocalPackPlace(BaseModel):
3000
3016
 
3001
3017
  address: str | None = Field(
3002
3018
  default=None,
3003
- description="Full formatted street address. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
3019
+ description="The address line Google shows for the business in the pack. For a business that serves an area rather than a storefront, Google shows years in business and the city here instead.",
3020
+ )
3021
+ booking_url: str | None = Field(
3022
+ default=None,
3023
+ alias="bookingUrl",
3024
+ description="Booking link Google shows for the business, when it has one. The query string carries the booking session, so it is kept.",
3004
3025
  )
3005
- category: str | None = Field(default=None, description="Primary place category.")
3006
- city: str | None = Field(default=None, description="City the place is in.")
3007
- claimed: bool | None = Field(
3008
- default=None, description="True when the place listing is claimed."
3026
+ category: str | None = Field(
3027
+ default=None,
3028
+ description="Business category Google shows, such as Coffee shop or Plumber.",
3009
3029
  )
3010
- country_code: str | None = Field(
3011
- default=None, alias="countryCode", description="Two-letter country code."
3030
+ cid: str | None = Field(
3031
+ default=None, description="Google customer id (CID) of the business listing."
3032
+ )
3033
+ description: str | None = Field(
3034
+ default=None,
3035
+ description="The text Google prints under the business name in the pack. Usually it is every line: the street address or years in business, opening hours, and a review quote. On some responses it is only the review quote, with the address and hours in their own fields.",
3036
+ )
3037
+ directions_url: str | None = Field(
3038
+ default=None,
3039
+ alias="directionsUrl",
3040
+ description="Google Maps directions link to the business, with tracking query parameters removed.",
3012
3041
  )
3013
3042
  domain: str | None = Field(
3014
- default=None, description="Registrable domain of the place website."
3043
+ default=None,
3044
+ description="Host name of the business website, such as www.example.com.",
3015
3045
  )
3016
- image: str | None = Field(
3046
+ hours: str | None = Field(
3017
3047
  default=None,
3018
- description="Primary photo URL for the place. The query string carries the image identity, so it is kept.",
3048
+ description="Opening hours text Google shows, such as Open 24 hours or Closed - Opens 7 AM.",
3019
3049
  )
3020
- latitude: float | None = Field(
3021
- default=None, description="Latitude of the place in decimal degrees."
3050
+ image: str | None = Field(
3051
+ default=None, description="Thumbnail photo URL Google shows for the business."
3022
3052
  )
3023
- longitude: float | None = Field(
3024
- default=None, description="Longitude of the place in decimal degrees."
3053
+ knowledge_graph_id: str | None = Field(
3054
+ default=None,
3055
+ alias="knowledgeGraphId",
3056
+ description="Google Knowledge Graph id of the business, such as /g/11vb1r7rlr.",
3025
3057
  )
3026
3058
  name: str = Field(
3027
- description="Place name. Populated whenever the provider has data for the entity."
3059
+ description="Business name. Populated whenever the provider has data for the entity."
3028
3060
  )
3029
3061
  phone: str | None = Field(
3030
- default=None, description="Business phone number, when listed."
3031
- )
3032
- place_id: str | None = Field(
3033
- default=None, alias="placeId", description="Place identifier."
3062
+ default=None,
3063
+ description="Business phone number, when Google shows one, as Google prints it: national format such as (512) 890-2933 or international format such as +1 512-890-2933.",
3034
3064
  )
3035
- postal_code: str | None = Field(
3036
- default=None, alias="postalCode", description="Postal code of the place."
3065
+ position: int = Field(
3066
+ description="One-based position of the business in the local pack, counting only unpaid listings. Populated whenever the provider has data for the entity."
3037
3067
  )
3038
3068
  price_level: str | None = Field(
3039
3069
  default=None,
3040
3070
  alias="priceLevel",
3041
- description="Price level indicator Google shows for the place.",
3071
+ description="Price range Google shows for the business, such as $10-20.",
3042
3072
  )
3043
- rank_absolute: int = Field(
3073
+ rank_absolute: int | None = Field(
3074
+ default=None,
3044
3075
  alias="rankAbsolute",
3045
- description="Absolute ranking position in the local pack results. Populated whenever the provider has data for the entity.",
3076
+ description="Position of the business among every element of the Google results page, counting from the top.",
3046
3077
  )
3047
3078
  rank_group: int | None = Field(
3048
3079
  default=None,
3049
3080
  alias="rankGroup",
3050
- description="Grouped ranking position within the local pack.",
3081
+ description="Position Google gives the business inside the local pack, counting sponsored listings, so it can be higher than position when an ad sits above it.",
3051
3082
  )
3052
3083
  rating: float | None = Field(
3053
3084
  default=None,
3054
- description="Average star rating out of 5. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
3055
- )
3056
- region: str | None = Field(
3057
- default=None, description="State or region the place is in."
3085
+ description="Average Google star rating out of 5. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
3058
3086
  )
3059
3087
  reviews_count: int | None = Field(
3060
- default=None, alias="reviewsCount", description="Total number of reviews."
3088
+ default=None,
3089
+ alias="reviewsCount",
3090
+ description="Number of Google reviews behind the rating. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
3091
+ )
3092
+ url: str | None = Field(
3093
+ default=None,
3094
+ description="Business website URL, when listed, with tracking query parameters removed.",
3061
3095
  )
3062
- url: str | None = Field(default=None, description="Canonical place URL.")
3063
3096
 
3064
3097
 
3065
3098
  class SeoRankedKeywordsData(BaseModel):
@@ -4076,15 +4109,18 @@ class SeoNamespace:
4076
4109
  options: RequestOptions | None = None,
4077
4110
  **input: Unpack[SeoLocalPackInput],
4078
4111
  ) -> RunResult[SeoLocalPackData]:
4079
- """SEO Local Pack
4112
+ """Google Local Pack
4080
4113
 
4081
- Search AnyAPI SEO local pack results with rankings, ratings, addresses, and
4082
- contact basics as normalized JSON.
4114
+ Get the Google local pack for a keyword in a city: the short list of
4115
+ businesses Google shows in the map box on its normal search results page, in
4116
+ pack order, with rating, review count, address, category, opening hours,
4117
+ phone, website, booking link, and Google listing ids. Sponsored listings are
4118
+ left out. For the full Google Maps results list, use maps.search.
4083
4119
 
4084
- Price: $0.0024 per request plus $0 per result (maximum $0.0024).
4120
+ Price: $0.0015 per request.
4085
4121
 
4086
4122
  Example:
4087
- res = client.seo.local_pack(keyword="coffee shop", language="en", limit=5, location="New York,New York,United States")
4123
+ res = client.seo.local_pack(keyword="coffee shop", language="en", location="New York,New York,United States")
4088
4124
  """
4089
4125
  raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
4090
4126
  "seo.local_pack", dict(input), options
@@ -4639,15 +4675,18 @@ class AsyncSeoNamespace:
4639
4675
  options: RequestOptions | None = None,
4640
4676
  **input: Unpack[SeoLocalPackInput],
4641
4677
  ) -> RunResult[SeoLocalPackData]:
4642
- """SEO Local Pack
4678
+ """Google Local Pack
4643
4679
 
4644
- Search AnyAPI SEO local pack results with rankings, ratings, addresses, and
4645
- contact basics as normalized JSON.
4680
+ Get the Google local pack for a keyword in a city: the short list of
4681
+ businesses Google shows in the map box on its normal search results page, in
4682
+ pack order, with rating, review count, address, category, opening hours,
4683
+ phone, website, booking link, and Google listing ids. Sponsored listings are
4684
+ left out. For the full Google Maps results list, use maps.search.
4646
4685
 
4647
- Price: $0.0024 per request plus $0 per result (maximum $0.0024).
4686
+ Price: $0.0015 per request.
4648
4687
 
4649
4688
  Example:
4650
- res = client.seo.local_pack(keyword="coffee shop", language="en", limit=5, location="New York,New York,United States")
4689
+ res = client.seo.local_pack(keyword="coffee shop", language="en", location="New York,New York,United States")
4651
4690
  """
4652
4691
  raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
4653
4692
  "seo.local_pack", dict(input), options
File without changes
File without changes
File without changes
File without changes