crawlora 1.7.0.dev1__tar.gz → 1.8.0.dev2__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 (31) hide show
  1. {crawlora-1.7.0.dev1/crawlora.egg-info → crawlora-1.8.0.dev2}/PKG-INFO +3 -3
  2. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/README.md +2 -2
  3. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/client.py +1 -1
  4. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/client.pyi +558 -0
  5. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/operations.py +115 -1
  6. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2/crawlora.egg-info}/PKG-INFO +3 -3
  7. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/docs/operations.md +9 -1
  8. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/pyproject.toml +1 -1
  9. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_client.py +2 -2
  10. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/LICENSE +0 -0
  11. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/MANIFEST.in +0 -0
  12. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/__init__.py +0 -0
  13. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/_pagination.py +0 -0
  14. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/_transport_sync.py +0 -0
  15. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/async_client.py +0 -0
  16. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora/py.typed +0 -0
  17. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora.egg-info/SOURCES.txt +0 -0
  18. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora.egg-info/dependency_links.txt +0 -0
  19. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora.egg-info/requires.txt +0 -0
  20. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/crawlora.egg-info/top_level.txt +0 -0
  21. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/docs/recipes.md +0 -0
  22. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/examples/async_search.py +0 -0
  23. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/examples/bing_search.py +0 -0
  24. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/examples/paginate.py +0 -0
  25. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/examples/youtube_transcript.py +0 -0
  26. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/setup.cfg +0 -0
  27. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_async_httpx.py +0 -0
  28. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_examples.py +0 -0
  29. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_v14_features.py +0 -0
  30. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_v15_features.py +0 -0
  31. {crawlora-1.7.0.dev1 → crawlora-1.8.0.dev2}/tests/test_w2_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crawlora
3
- Version: 1.7.0.dev1
3
+ Version: 1.8.0.dev2
4
4
  Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
5
5
  Author: Crawlora
6
6
  License-Expression: MIT
@@ -27,7 +27,7 @@ Dynamic: license-file
27
27
  # Crawlora Python SDK
28
28
 
29
29
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
30
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
30
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
31
31
  with generated type stubs for editor and type-checker support.
32
32
 
33
33
  - Runtime: Python 3.10+
@@ -38,7 +38,7 @@ with generated type stubs for editor and type-checker support.
38
38
  ## Install
39
39
 
40
40
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
41
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
41
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
42
42
 
43
43
  ```sh
44
44
  pip install --pre crawlora
@@ -1,7 +1,7 @@
1
1
  # Crawlora Python SDK
2
2
 
3
3
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
4
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
4
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
5
5
  with generated type stubs for editor and type-checker support.
6
6
 
7
7
  - Runtime: Python 3.10+
@@ -12,7 +12,7 @@ with generated type stubs for editor and type-checker support.
12
12
  ## Install
13
13
 
14
14
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
15
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
15
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
16
16
 
17
17
  ```sh
18
18
  pip install --pre crawlora
@@ -20,7 +20,7 @@ from ._transport_sync import KeepAliveTransport
20
20
  from .operations import GROUPS, OPERATIONS
21
21
 
22
22
  DEFAULT_BASE_URL = "https://api.crawlora.net/api/v1"
23
- VERSION = "1.7.0-sdk.1"
23
+ VERSION = "1.8.0-sdk.2"
24
24
  DEFAULT_USER_AGENT = f"crawlora-python-sdk/{VERSION}"
25
25
  DEFAULT_MAX_RETRY_DELAY = 30.0
26
26
  DEFAULT_RETRY_STATUSES = (408, 409, 425, 429)
@@ -173,6 +173,57 @@ ModelAmazonSuggestResponseDoc = TypedDict('ModelAmazonSuggestResponseDoc', {
173
173
  'msg': NotRequired[str],
174
174
  }, total=False)
175
175
 
176
+ ModelAntibotBand = Literal['easy', 'medium', 'hard', 'very_hard', 'blocked', 'unknown']
177
+
178
+ ModelAntibotProtection = TypedDict('ModelAntibotProtection', {
179
+ 'captcha_mode': NotRequired[str],
180
+ 'captcha_type': NotRequired[str],
181
+ 'confidence': NotRequired[str],
182
+ 'confidence_score': NotRequired[int],
183
+ 'custom_vm': NotRequired[bool],
184
+ 'evidence': NotRequired[list[str]],
185
+ 'kind': NotRequired[str],
186
+ 'vendor': NotRequired[str],
187
+ 'vm_vendor': NotRequired[str],
188
+ }, total=False)
189
+
190
+ ModelAntibotSignals = TypedDict('ModelAntibotSignals', {
191
+ 'attempts_passed': NotRequired[int],
192
+ 'attempts_run': NotRequired[int],
193
+ 'attempts_skipped': NotRequired[int],
194
+ 'block_markers': NotRequired[list[str]],
195
+ 'blocked_status': NotRequired[bool],
196
+ 'captcha_detected': NotRequired[bool],
197
+ 'challenge_detected': NotRequired[bool],
198
+ 'js_render_likely': NotRequired[bool],
199
+ 'rate_limited': NotRequired[bool],
200
+ }, total=False)
201
+
202
+ ModelAntibotVerdict = TypedDict('ModelAntibotVerdict', {
203
+ 'auth_required': NotRequired[bool],
204
+ 'block_detail': NotRequired[str],
205
+ 'block_reason': NotRequired[str],
206
+ 'captcha_types': NotRequired[list[str]],
207
+ 'coverage': NotRequired[str],
208
+ 'custom_vm': NotRequired[bool],
209
+ 'detection_confidence_score': NotRequired[int],
210
+ 'difficulty_band': NotRequired[ModelAntibotBand],
211
+ 'difficulty_score': NotRequired[int],
212
+ 'easiest_working_transport': NotRequired[str],
213
+ 'enforcement': NotRequired[str],
214
+ 'gated_layers': NotRequired[list[str]],
215
+ 'notes': NotRequired[list[str]],
216
+ 'protections': NotRequired[list[ModelAntibotProtection]],
217
+ 'recommended_approach': NotRequired[str],
218
+ 'recommended_profile': NotRequired[str],
219
+ 'retry_after': NotRequired[str],
220
+ 'scrapeable': NotRequired[bool],
221
+ 'signals': NotRequired[ModelAntibotSignals],
222
+ 'summary': NotRequired[str],
223
+ 'url': NotRequired[str],
224
+ 'vm_vendor': NotRequired[str],
225
+ }, total=False)
226
+
176
227
  ModelApiComponentStatus = TypedDict('ModelApiComponentStatus', {
177
228
  'error': NotRequired[str],
178
229
  'ready': NotRequired[bool],
@@ -2480,6 +2531,48 @@ ModelContactContact = TypedDict('ModelContactContact', {
2480
2531
  'url': NotRequired[str],
2481
2532
  }, total=False)
2482
2533
 
2534
+ ModelContactContactRequest = TypedDict('ModelContactContactRequest', {
2535
+ 'independents_only': NotRequired[bool],
2536
+ 'max_pages': NotRequired[int],
2537
+ 'url': Required[str],
2538
+ 'verify': NotRequired[bool],
2539
+ }, total=False)
2540
+
2541
+ ModelContactContactResult = TypedDict('ModelContactContactResult', {
2542
+ 'crawl_status': NotRequired[Literal['ok', 'blocked', 'unreachable']],
2543
+ 'crawled_pages': NotRequired[list[str]],
2544
+ 'domain': NotRequired[str],
2545
+ 'domain_type': NotRequired[Literal['independent', 'chain', 'social', 'builder', 'directory']],
2546
+ 'emails': NotRequired[list[ModelContactEmailContact]],
2547
+ 'phones': NotRequired[list[ModelContactPhoneContact]],
2548
+ 'socials': NotRequired[list[ModelContactSocialProfile]],
2549
+ 'website': NotRequired[str],
2550
+ }, total=False)
2551
+
2552
+ ModelContactEmailContact = TypedDict('ModelContactEmailContact', {
2553
+ 'address': NotRequired[str],
2554
+ 'source_page': NotRequired[str],
2555
+ 'status': NotRequired[Literal['verified', 'risky', 'unverified', 'invalid']],
2556
+ 'type': NotRequired[Literal['generic', 'role', 'personal']],
2557
+ }, total=False)
2558
+
2559
+ ModelContactPhoneContact = TypedDict('ModelContactPhoneContact', {
2560
+ 'number': NotRequired[str],
2561
+ 'source_page': NotRequired[str],
2562
+ }, total=False)
2563
+
2564
+ ModelContactSocialProfile = TypedDict('ModelContactSocialProfile', {
2565
+ 'handle': NotRequired[str],
2566
+ 'network': NotRequired[str],
2567
+ 'url': NotRequired[str],
2568
+ }, total=False)
2569
+
2570
+ ModelContactContactResponseDoc = TypedDict('ModelContactContactResponseDoc', {
2571
+ 'code': NotRequired[int],
2572
+ 'data': NotRequired[ModelContactContactResult],
2573
+ 'msg': NotRequired[str],
2574
+ }, total=False)
2575
+
2483
2576
  ModelDatasetsDatasetInfo = TypedDict('ModelDatasetsDatasetInfo', {
2484
2577
  'capabilities': NotRequired[list[str]],
2485
2578
  'description': NotRequired[str],
@@ -2530,6 +2623,17 @@ ModelDatasetsListResponseDoc = TypedDict('ModelDatasetsListResponseDoc', {
2530
2623
  'msg': NotRequired[str],
2531
2624
  }, total=False)
2532
2625
 
2626
+ ModelDiagnosticsAntibotCheckRequest = TypedDict('ModelDiagnosticsAntibotCheckRequest', {
2627
+ 'fast': NotRequired[bool],
2628
+ 'url': Required[str],
2629
+ }, total=False)
2630
+
2631
+ ModelDiagnosticsAntibotCheckResponseDoc = TypedDict('ModelDiagnosticsAntibotCheckResponseDoc', {
2632
+ 'code': NotRequired[int],
2633
+ 'data': NotRequired[ModelAntibotVerdict],
2634
+ 'msg': NotRequired[str],
2635
+ }, total=False)
2636
+
2533
2637
  ModelEbayItem = TypedDict('ModelEbayItem', {
2534
2638
  'availability': NotRequired[str],
2535
2639
  'condition': NotRequired[str],
@@ -7476,6 +7580,107 @@ ModelRedditUserPostsResponseDoc = TypedDict('ModelRedditUserPostsResponseDoc', {
7476
7580
  'msg': NotRequired[str],
7477
7581
  }, total=False)
7478
7582
 
7583
+ ModelRedfinEstimateResponse = TypedDict('ModelRedfinEstimateResponse', {
7584
+ 'address': NotRequired[str],
7585
+ 'baths': NotRequired[float],
7586
+ 'beds': NotRequired[float],
7587
+ 'city_time_series': NotRequired[list[float]],
7588
+ 'county_time_series': NotRequired[list[float]],
7589
+ 'estimate': NotRequired[float],
7590
+ 'estimate_text': NotRequired[str],
7591
+ 'latitude': NotRequired[float],
7592
+ 'listing_price': NotRequired[float],
7593
+ 'longitude': NotRequired[float],
7594
+ 'postal_code_time_series': NotRequired[list[float]],
7595
+ 'property_id': NotRequired[str],
7596
+ 'property_time_series': NotRequired[list[float]],
7597
+ 'sqft': NotRequired[float],
7598
+ 'updated_at': NotRequired[int],
7599
+ 'year_built': NotRequired[int],
7600
+ }, total=False)
7601
+
7602
+ ModelRedfinPropertyItem = TypedDict('ModelRedfinPropertyItem', {
7603
+ 'address': NotRequired[str],
7604
+ 'baths': NotRequired[float],
7605
+ 'beds': NotRequired[float],
7606
+ 'city': NotRequired[str],
7607
+ 'days_on_market': NotRequired[int],
7608
+ 'hoa_monthly': NotRequired[float],
7609
+ 'image': NotRequired[str],
7610
+ 'latitude': NotRequired[float],
7611
+ 'listing_id': NotRequired[str],
7612
+ 'longitude': NotRequired[float],
7613
+ 'lot_size': NotRequired[float],
7614
+ 'mls_number': NotRequired[str],
7615
+ 'price': NotRequired[float],
7616
+ 'price_per_sqft': NotRequired[float],
7617
+ 'property_id': NotRequired[str],
7618
+ 'property_type': NotRequired[str],
7619
+ 'sqft': NotRequired[float],
7620
+ 'state': NotRequired[str],
7621
+ 'status': NotRequired[str],
7622
+ 'url': NotRequired[str],
7623
+ 'year_built': NotRequired[int],
7624
+ 'zip': NotRequired[str],
7625
+ }, total=False)
7626
+
7627
+ ModelRedfinPropertyResponse = TypedDict('ModelRedfinPropertyResponse', {
7628
+ 'address': NotRequired[str],
7629
+ 'baths': NotRequired[float],
7630
+ 'beds': NotRequired[float],
7631
+ 'city': NotRequired[str],
7632
+ 'days_on_market': NotRequired[int],
7633
+ 'description': NotRequired[str],
7634
+ 'facts': NotRequired[list[str]],
7635
+ 'hoa_monthly': NotRequired[float],
7636
+ 'image': NotRequired[str],
7637
+ 'latitude': NotRequired[float],
7638
+ 'listing_id': NotRequired[str],
7639
+ 'longitude': NotRequired[float],
7640
+ 'lot_size': NotRequired[float],
7641
+ 'mls_number': NotRequired[str],
7642
+ 'price': NotRequired[float],
7643
+ 'price_per_sqft': NotRequired[float],
7644
+ 'property_id': NotRequired[str],
7645
+ 'property_type': NotRequired[str],
7646
+ 'sqft': NotRequired[float],
7647
+ 'state': NotRequired[str],
7648
+ 'status': NotRequired[str],
7649
+ 'url': NotRequired[str],
7650
+ 'year_built': NotRequired[int],
7651
+ 'zip': NotRequired[str],
7652
+ }, total=False)
7653
+
7654
+ ModelRedfinRegionTrendsResponse = TypedDict('ModelRedfinRegionTrendsResponse', {
7655
+ 'avg_days_on_market': NotRequired[str],
7656
+ 'avg_down_payment': NotRequired[str],
7657
+ 'avg_num_offers': NotRequired[str],
7658
+ 'median_list_per_sqft': NotRequired[str],
7659
+ 'median_list_price': NotRequired[str],
7660
+ 'median_sale_per_list': NotRequired[str],
7661
+ 'median_sale_per_sqft': NotRequired[str],
7662
+ 'median_sale_price': NotRequired[str],
7663
+ 'num_homes_on_market': NotRequired[str],
7664
+ 'num_homes_sold': NotRequired[str],
7665
+ 'region_id': NotRequired[int],
7666
+ 'region_type': NotRequired[int],
7667
+ 'yoy_sale_per_sqft': NotRequired[str],
7668
+ 'yoy_sale_price': NotRequired[str],
7669
+ }, total=False)
7670
+
7671
+ ModelRedfinSearchResponse = TypedDict('ModelRedfinSearchResponse', {
7672
+ 'location': NotRequired[str],
7673
+ 'page': NotRequired[int],
7674
+ 'region_id': NotRequired[int],
7675
+ 'region_type': NotRequired[int],
7676
+ 'results': NotRequired[list[ModelRedfinPropertyItem]],
7677
+ }, total=False)
7678
+
7679
+ ModelRedfinSimilarResponse = TypedDict('ModelRedfinSimilarResponse', {
7680
+ 'property_id': NotRequired[str],
7681
+ 'results': NotRequired[list[ModelRedfinPropertyItem]],
7682
+ }, total=False)
7683
+
7479
7684
  ModelReferralsReferralAttributionDoc = TypedDict('ModelReferralsReferralAttributionDoc', {
7480
7685
  'campaign': NotRequired[str],
7481
7686
  'code': NotRequired[str],
@@ -8816,6 +9021,7 @@ ModelSpotifyCountryHubContentMeta = TypedDict('ModelSpotifyCountryHubContentMeta
8816
9021
  'fetchedAt': NotRequired[str],
8817
9022
  'itemCount': NotRequired[int],
8818
9023
  'operationName': NotRequired[str],
9024
+ 'partialErrors': NotRequired[int],
8819
9025
  }, total=False)
8820
9026
 
8821
9027
  ModelSpotifyCountryHubContentResponse = TypedDict('ModelSpotifyCountryHubContentResponse', {
@@ -8850,6 +9056,7 @@ ModelSpotifyCountryHubMeta = TypedDict('ModelSpotifyCountryHubMeta', {
8850
9056
  'fetchedAt': NotRequired[str],
8851
9057
  'itemCount': NotRequired[int],
8852
9058
  'operationName': NotRequired[str],
9059
+ 'partialErrors': NotRequired[int],
8853
9060
  'sectionCount': NotRequired[int],
8854
9061
  }, total=False)
8855
9062
 
@@ -10697,6 +10904,65 @@ ModelUserUserRotateApikeyResponseDoc = TypedDict('ModelUserUserRotateApikeyRespo
10697
10904
  'msg': NotRequired[str],
10698
10905
  }, total=False)
10699
10906
 
10907
+ ModelWebScrapeInfo = TypedDict('ModelWebScrapeInfo', {
10908
+ 'backend': NotRequired[str],
10909
+ 'cache_state': NotRequired[str],
10910
+ 'cached_at': NotRequired[str],
10911
+ 'escalated': NotRequired[bool],
10912
+ 'method': NotRequired[str],
10913
+ }, total=False)
10914
+
10915
+ ModelWebScrapeLink = TypedDict('ModelWebScrapeLink', {
10916
+ 'href': NotRequired[str],
10917
+ 'rel': NotRequired[str],
10918
+ 'text': NotRequired[str],
10919
+ }, total=False)
10920
+
10921
+ ModelWebScrapeMetadata = TypedDict('ModelWebScrapeMetadata', {
10922
+ 'author': NotRequired[str],
10923
+ 'canonical_url': NotRequired[str],
10924
+ 'content_type': NotRequired[str],
10925
+ 'description': NotRequired[str],
10926
+ 'final_url': NotRequired[str],
10927
+ 'image': NotRequired[str],
10928
+ 'language': NotRequired[str],
10929
+ 'modified_at': NotRequired[str],
10930
+ 'published_at': NotRequired[str],
10931
+ 'section': NotRequired[str],
10932
+ 'site_name': NotRequired[str],
10933
+ 'source_url': NotRequired[str],
10934
+ 'status_code': NotRequired[int],
10935
+ 'title': NotRequired[str],
10936
+ }, total=False)
10937
+
10938
+ ModelWebScrapeOption = TypedDict('ModelWebScrapeOption', {
10939
+ 'backend': NotRequired[str],
10940
+ 'formats': NotRequired[list[str]],
10941
+ 'max_age': NotRequired[int],
10942
+ 'only_main_content': NotRequired[bool],
10943
+ 'proxy': NotRequired[str],
10944
+ 'render': NotRequired[Literal['auto', 'http', 'browser', 'unblocker']],
10945
+ 'store_in_cache': NotRequired[bool],
10946
+ 'url': Required[str],
10947
+ 'wait_for': NotRequired[int],
10948
+ }, total=False)
10949
+
10950
+ ModelWebScrapeResult = TypedDict('ModelWebScrapeResult', {
10951
+ 'html': NotRequired[str],
10952
+ 'link_details': NotRequired[list[ModelWebScrapeLink]],
10953
+ 'links': NotRequired[list[str]],
10954
+ 'markdown': NotRequired[str],
10955
+ 'metadata': NotRequired[ModelWebScrapeMetadata],
10956
+ 'raw_html': NotRequired[str],
10957
+ 'scrape': NotRequired[ModelWebScrapeInfo],
10958
+ }, total=False)
10959
+
10960
+ ModelWebScrapeResponseDoc = TypedDict('ModelWebScrapeResponseDoc', {
10961
+ 'code': NotRequired[int],
10962
+ 'data': NotRequired[ModelWebScrapeResult],
10963
+ 'msg': NotRequired[str],
10964
+ }, total=False)
10965
+
10700
10966
  ModelYahoofinanceActionEvents = TypedDict('ModelYahoofinanceActionEvents', {
10701
10967
  'capital_gains': NotRequired[list[dict[str, Any]]],
10702
10968
  'dividends': NotRequired[list[dict[str, Any]]],
@@ -12448,6 +12714,15 @@ CoinGeckoTrendingParams = TypedDict('CoinGeckoTrendingParams', {
12448
12714
  'vs_currency': NotRequired[Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']],
12449
12715
  }, total=False)
12450
12716
 
12717
+ WebContactBody = ModelContactContactRequest
12718
+ WebContactResponse = ModelContactContactResponseDoc
12719
+ WebContactParams = TypedDict('WebContactParams', {
12720
+ '_response_type': NotRequired[ResponseType],
12721
+ '_timeout': NotRequired[float],
12722
+ '_headers': NotRequired[Mapping[str, str]],
12723
+ 'option': Required[WebContactBody],
12724
+ }, total=False)
12725
+
12451
12726
  DatasetsListResponse = ModelDatasetsListResponseDoc
12452
12727
  DatasetsListParams = TypedDict('DatasetsListParams', {
12453
12728
  '_response_type': NotRequired[ResponseType],
@@ -12525,6 +12800,15 @@ DatasetsGoogleMapBusinessesSearchParams = TypedDict('DatasetsGoogleMapBusinesses
12525
12800
  'page_size': NotRequired[int],
12526
12801
  }, total=False)
12527
12802
 
12803
+ WebAntibotCheckBody = ModelDiagnosticsAntibotCheckRequest
12804
+ WebAntibotCheckResponse = ModelDiagnosticsAntibotCheckResponseDoc
12805
+ WebAntibotCheckParams = TypedDict('WebAntibotCheckParams', {
12806
+ '_response_type': NotRequired[ResponseType],
12807
+ '_timeout': NotRequired[float],
12808
+ '_headers': NotRequired[Mapping[str, str]],
12809
+ 'request': Required[WebAntibotCheckBody],
12810
+ }, total=False)
12811
+
12528
12812
  EBayEbayItemResponse = ModelEbayItemResponseDoc
12529
12813
  EBayEbayItemParams = TypedDict('EBayEbayItemParams', {
12530
12814
  '_response_type': NotRequired[ResponseType],
@@ -14706,6 +14990,57 @@ RedditUserPostsParams = TypedDict('RedditUserPostsParams', {
14706
14990
  'after': NotRequired[str],
14707
14991
  }, total=False)
14708
14992
 
14993
+ RedfinEstimateResponse = ModelRedfinEstimateResponse
14994
+ RedfinEstimateParams = TypedDict('RedfinEstimateParams', {
14995
+ '_response_type': NotRequired[ResponseType],
14996
+ '_timeout': NotRequired[float],
14997
+ '_headers': NotRequired[Mapping[str, str]],
14998
+ 'property_id': Required[str],
14999
+ }, total=False)
15000
+
15001
+ RedfinPropertyResponse = ModelRedfinPropertyResponse
15002
+ RedfinPropertyParams = TypedDict('RedfinPropertyParams', {
15003
+ '_response_type': NotRequired[ResponseType],
15004
+ '_timeout': NotRequired[float],
15005
+ '_headers': NotRequired[Mapping[str, str]],
15006
+ 'url': NotRequired[str],
15007
+ 'property_id': NotRequired[str],
15008
+ 'listing_id': NotRequired[str],
15009
+ }, total=False)
15010
+
15011
+ RedfinRegionTrendsResponse = ModelRedfinRegionTrendsResponse
15012
+ RedfinRegionTrendsParams = TypedDict('RedfinRegionTrendsParams', {
15013
+ '_response_type': NotRequired[ResponseType],
15014
+ '_timeout': NotRequired[float],
15015
+ '_headers': NotRequired[Mapping[str, str]],
15016
+ 'region_id': Required[int],
15017
+ 'region_type': NotRequired[int],
15018
+ }, total=False)
15019
+
15020
+ RedfinSearchResponse = ModelRedfinSearchResponse
15021
+ RedfinSearchParams = TypedDict('RedfinSearchParams', {
15022
+ '_response_type': NotRequired[ResponseType],
15023
+ '_timeout': NotRequired[float],
15024
+ '_headers': NotRequired[Mapping[str, str]],
15025
+ 'location': NotRequired[str],
15026
+ 'page': NotRequired[int],
15027
+ 'region_id': NotRequired[int],
15028
+ 'region_type': NotRequired[int],
15029
+ 'status': NotRequired[str],
15030
+ 'min_price': NotRequired[int],
15031
+ 'max_price': NotRequired[int],
15032
+ 'min_beds': NotRequired[int],
15033
+ 'min_baths': NotRequired[float],
15034
+ }, total=False)
15035
+
15036
+ RedfinSimilarResponse = ModelRedfinSimilarResponse
15037
+ RedfinSimilarParams = TypedDict('RedfinSimilarParams', {
15038
+ '_response_type': NotRequired[ResponseType],
15039
+ '_timeout': NotRequired[float],
15040
+ '_headers': NotRequired[Mapping[str, str]],
15041
+ 'property_id': Required[str],
15042
+ }, total=False)
15043
+
14709
15044
  ReferralsClickBody = ModelReferralsReferralClickRequestDoc
14710
15045
  ReferralsClickResponse = ModelReferralsReferralClickResponseDoc
14711
15046
  ReferralsClickParams = TypedDict('ReferralsClickParams', {
@@ -15989,6 +16324,15 @@ UserMeApiKeysRevealParams = TypedDict('UserMeApiKeysRevealParams', {
15989
16324
  'id': Required[str],
15990
16325
  }, total=False)
15991
16326
 
16327
+ WebScrapeBody = ModelWebScrapeOption
16328
+ WebScrapeResponse = ModelWebScrapeResponseDoc
16329
+ WebScrapeParams = TypedDict('WebScrapeParams', {
16330
+ '_response_type': NotRequired[ResponseType],
16331
+ '_timeout': NotRequired[float],
16332
+ '_headers': NotRequired[Mapping[str, str]],
16333
+ 'scrapeOption': Required[WebScrapeBody],
16334
+ }, total=False)
16335
+
15992
16336
  YahooFinanceCalendarsResponse = ModelYahoofinanceCalendarsResponseDoc
15993
16337
  YahooFinanceCalendarsParams = TypedDict('YahooFinanceCalendarsParams', {
15994
16338
  '_response_type': NotRequired[ResponseType],
@@ -16599,6 +16943,11 @@ class CoinGeckoGroup:
16599
16943
  def treasuries(self, **params: Unpack[CoinGeckoTreasuriesParams]) -> CoinGeckoTreasuriesResponse: ...
16600
16944
  def trending(self, **params: Unpack[CoinGeckoTrendingParams]) -> CoinGeckoTrendingResponse: ...
16601
16945
 
16946
+ class WebGroup:
16947
+ def contact(self, **params: Unpack[WebContactParams]) -> WebContactResponse: ...
16948
+ def antibot_check(self, **params: Unpack[WebAntibotCheckParams]) -> WebAntibotCheckResponse: ...
16949
+ def scrape(self, **params: Unpack[WebScrapeParams]) -> WebScrapeResponse: ...
16950
+
16602
16951
  class DatasetsGroup:
16603
16952
  def list(self, **params: Unpack[DatasetsListParams]) -> DatasetsListResponse: ...
16604
16953
  def google_map_businesses_facets(self, **params: Unpack[DatasetsGoogleMapBusinessesFacetsParams]) -> DatasetsGoogleMapBusinessesFacetsResponse: ...
@@ -16858,6 +17207,13 @@ class RedditGroup:
16858
17207
  def user_comments(self, **params: Unpack[RedditUserCommentsParams]) -> RedditUserCommentsResponse: ...
16859
17208
  def user_posts(self, **params: Unpack[RedditUserPostsParams]) -> RedditUserPostsResponse: ...
16860
17209
 
17210
+ class RedfinGroup:
17211
+ def estimate(self, **params: Unpack[RedfinEstimateParams]) -> RedfinEstimateResponse: ...
17212
+ def property(self, **params: Unpack[RedfinPropertyParams]) -> RedfinPropertyResponse: ...
17213
+ def region_trends(self, **params: Unpack[RedfinRegionTrendsParams]) -> RedfinRegionTrendsResponse: ...
17214
+ def search(self, **params: Unpack[RedfinSearchParams]) -> RedfinSearchResponse: ...
17215
+ def similar(self, **params: Unpack[RedfinSimilarParams]) -> RedfinSimilarResponse: ...
17216
+
16861
17217
  class ReferralsGroup:
16862
17218
  def click(self, **params: Unpack[ReferralsClickParams]) -> ReferralsClickResponse: ...
16863
17219
  def me(self, **params: Unpack[ReferralsMeParams]) -> ReferralsMeResponse: ...
@@ -17151,11 +17507,13 @@ OperationId = Literal[
17151
17507
  'coingecko-token-unlocks',
17152
17508
  'coingecko-treasuries',
17153
17509
  'coingecko-trending',
17510
+ 'contact',
17154
17511
  'datasets-list',
17155
17512
  'datasets-google-map-businesses-facets',
17156
17513
  'datasets-google-map-businesses-item',
17157
17514
  'datasets-google-map-businesses-nearby',
17158
17515
  'datasets-google-map-businesses-search',
17516
+ 'antibot-check',
17159
17517
  'ebay-item',
17160
17518
  'ebay-search',
17161
17519
  'ebay-seller',
@@ -17380,6 +17738,11 @@ OperationId = Literal[
17380
17738
  'reddit-trends',
17381
17739
  'reddit-user-comments',
17382
17740
  'reddit-user-posts',
17741
+ 'redfin-estimate',
17742
+ 'redfin-property',
17743
+ 'redfin-region-trends',
17744
+ 'redfin-search',
17745
+ 'redfin-similar',
17383
17746
  'referrals-click',
17384
17747
  'referrals-me',
17385
17748
  'referrals-me-events',
@@ -17504,6 +17867,7 @@ OperationId = Literal[
17504
17867
  'user-me-api-keys',
17505
17868
  'user-me-api-keys-rotate',
17506
17869
  'user-me-api-keys-reveal',
17870
+ 'web-scrape',
17507
17871
  'yahoo-finance-calendars',
17508
17872
  'yahoo-finance-calendar',
17509
17873
  'yahoo-finance-download',
@@ -17572,6 +17936,7 @@ class CrawloraClient:
17572
17936
  brand: BrandGroup
17573
17937
  brave: BraveGroup
17574
17938
  coin_gecko: CoinGeckoGroup
17939
+ web: WebGroup
17575
17940
  datasets: DatasetsGroup
17576
17941
  e_bay: EBayGroup
17577
17942
  geocoding: GeocodingGroup
@@ -17587,6 +17952,7 @@ class CrawloraClient:
17587
17952
  polymarket: PolymarketGroup
17588
17953
  product_hunt: ProductHuntGroup
17589
17954
  reddit: RedditGroup
17955
+ redfin: RedfinGroup
17590
17956
  referrals: ReferralsGroup
17591
17957
  rotten_tomatoes: RottenTomatoesGroup
17592
17958
  shop_app: ShopAppGroup
@@ -18679,6 +19045,18 @@ class CrawloraClient:
18679
19045
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
18680
19046
  ) -> CoinGeckoTrendingResponse: ...
18681
19047
  @overload
19048
+ def operation(
19049
+ self,
19050
+ operation_id: Literal['contact'],
19051
+ params: WebContactParams,
19052
+ *,
19053
+ response_type: ResponseType = ...,
19054
+ timeout: float | None = ...,
19055
+ headers: Mapping[str, str] | None = ...,
19056
+ retries: int | None = ...,
19057
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
19058
+ ) -> WebContactResponse: ...
19059
+ @overload
18682
19060
  def operation(
18683
19061
  self,
18684
19062
  operation_id: Literal['datasets-list'],
@@ -18739,6 +19117,18 @@ class CrawloraClient:
18739
19117
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
18740
19118
  ) -> DatasetsGoogleMapBusinessesSearchResponse: ...
18741
19119
  @overload
19120
+ def operation(
19121
+ self,
19122
+ operation_id: Literal['antibot-check'],
19123
+ params: WebAntibotCheckParams,
19124
+ *,
19125
+ response_type: ResponseType = ...,
19126
+ timeout: float | None = ...,
19127
+ headers: Mapping[str, str] | None = ...,
19128
+ retries: int | None = ...,
19129
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
19130
+ ) -> WebAntibotCheckResponse: ...
19131
+ @overload
18742
19132
  def operation(
18743
19133
  self,
18744
19134
  operation_id: Literal['ebay-item'],
@@ -21427,6 +21817,66 @@ class CrawloraClient:
21427
21817
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21428
21818
  ) -> RedditUserPostsResponse: ...
21429
21819
  @overload
21820
+ def operation(
21821
+ self,
21822
+ operation_id: Literal['redfin-estimate'],
21823
+ params: RedfinEstimateParams,
21824
+ *,
21825
+ response_type: ResponseType = ...,
21826
+ timeout: float | None = ...,
21827
+ headers: Mapping[str, str] | None = ...,
21828
+ retries: int | None = ...,
21829
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21830
+ ) -> RedfinEstimateResponse: ...
21831
+ @overload
21832
+ def operation(
21833
+ self,
21834
+ operation_id: Literal['redfin-property'],
21835
+ params: RedfinPropertyParams = ...,
21836
+ *,
21837
+ response_type: ResponseType = ...,
21838
+ timeout: float | None = ...,
21839
+ headers: Mapping[str, str] | None = ...,
21840
+ retries: int | None = ...,
21841
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21842
+ ) -> RedfinPropertyResponse: ...
21843
+ @overload
21844
+ def operation(
21845
+ self,
21846
+ operation_id: Literal['redfin-region-trends'],
21847
+ params: RedfinRegionTrendsParams,
21848
+ *,
21849
+ response_type: ResponseType = ...,
21850
+ timeout: float | None = ...,
21851
+ headers: Mapping[str, str] | None = ...,
21852
+ retries: int | None = ...,
21853
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21854
+ ) -> RedfinRegionTrendsResponse: ...
21855
+ @overload
21856
+ def operation(
21857
+ self,
21858
+ operation_id: Literal['redfin-search'],
21859
+ params: RedfinSearchParams = ...,
21860
+ *,
21861
+ response_type: ResponseType = ...,
21862
+ timeout: float | None = ...,
21863
+ headers: Mapping[str, str] | None = ...,
21864
+ retries: int | None = ...,
21865
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21866
+ ) -> RedfinSearchResponse: ...
21867
+ @overload
21868
+ def operation(
21869
+ self,
21870
+ operation_id: Literal['redfin-similar'],
21871
+ params: RedfinSimilarParams,
21872
+ *,
21873
+ response_type: ResponseType = ...,
21874
+ timeout: float | None = ...,
21875
+ headers: Mapping[str, str] | None = ...,
21876
+ retries: int | None = ...,
21877
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
21878
+ ) -> RedfinSimilarResponse: ...
21879
+ @overload
21430
21880
  def operation(
21431
21881
  self,
21432
21882
  operation_id: Literal['referrals-click'],
@@ -22915,6 +23365,18 @@ class CrawloraClient:
22915
23365
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
22916
23366
  ) -> UserMeApiKeysRevealResponse: ...
22917
23367
  @overload
23368
+ def operation(
23369
+ self,
23370
+ operation_id: Literal['web-scrape'],
23371
+ params: WebScrapeParams,
23372
+ *,
23373
+ response_type: ResponseType = ...,
23374
+ timeout: float | None = ...,
23375
+ headers: Mapping[str, str] | None = ...,
23376
+ retries: int | None = ...,
23377
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
23378
+ ) -> WebScrapeResponse: ...
23379
+ @overload
22918
23380
  def operation(
22919
23381
  self,
22920
23382
  operation_id: Literal['yahoo-finance-calendars'],
@@ -24583,6 +25045,18 @@ class CrawloraClient:
24583
25045
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
24584
25046
  ) -> CoinGeckoTrendingResponse: ...
24585
25047
  @overload
25048
+ def request(
25049
+ self,
25050
+ operation_id: Literal['contact'],
25051
+ params: WebContactParams,
25052
+ *,
25053
+ response_type: ResponseType = ...,
25054
+ timeout: float | None = ...,
25055
+ headers: Mapping[str, str] | None = ...,
25056
+ retries: int | None = ...,
25057
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
25058
+ ) -> WebContactResponse: ...
25059
+ @overload
24586
25060
  def request(
24587
25061
  self,
24588
25062
  operation_id: Literal['datasets-list'],
@@ -24643,6 +25117,18 @@ class CrawloraClient:
24643
25117
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
24644
25118
  ) -> DatasetsGoogleMapBusinessesSearchResponse: ...
24645
25119
  @overload
25120
+ def request(
25121
+ self,
25122
+ operation_id: Literal['antibot-check'],
25123
+ params: WebAntibotCheckParams,
25124
+ *,
25125
+ response_type: ResponseType = ...,
25126
+ timeout: float | None = ...,
25127
+ headers: Mapping[str, str] | None = ...,
25128
+ retries: int | None = ...,
25129
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
25130
+ ) -> WebAntibotCheckResponse: ...
25131
+ @overload
24646
25132
  def request(
24647
25133
  self,
24648
25134
  operation_id: Literal['ebay-item'],
@@ -27331,6 +27817,66 @@ class CrawloraClient:
27331
27817
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27332
27818
  ) -> RedditUserPostsResponse: ...
27333
27819
  @overload
27820
+ def request(
27821
+ self,
27822
+ operation_id: Literal['redfin-estimate'],
27823
+ params: RedfinEstimateParams,
27824
+ *,
27825
+ response_type: ResponseType = ...,
27826
+ timeout: float | None = ...,
27827
+ headers: Mapping[str, str] | None = ...,
27828
+ retries: int | None = ...,
27829
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27830
+ ) -> RedfinEstimateResponse: ...
27831
+ @overload
27832
+ def request(
27833
+ self,
27834
+ operation_id: Literal['redfin-property'],
27835
+ params: RedfinPropertyParams = ...,
27836
+ *,
27837
+ response_type: ResponseType = ...,
27838
+ timeout: float | None = ...,
27839
+ headers: Mapping[str, str] | None = ...,
27840
+ retries: int | None = ...,
27841
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27842
+ ) -> RedfinPropertyResponse: ...
27843
+ @overload
27844
+ def request(
27845
+ self,
27846
+ operation_id: Literal['redfin-region-trends'],
27847
+ params: RedfinRegionTrendsParams,
27848
+ *,
27849
+ response_type: ResponseType = ...,
27850
+ timeout: float | None = ...,
27851
+ headers: Mapping[str, str] | None = ...,
27852
+ retries: int | None = ...,
27853
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27854
+ ) -> RedfinRegionTrendsResponse: ...
27855
+ @overload
27856
+ def request(
27857
+ self,
27858
+ operation_id: Literal['redfin-search'],
27859
+ params: RedfinSearchParams = ...,
27860
+ *,
27861
+ response_type: ResponseType = ...,
27862
+ timeout: float | None = ...,
27863
+ headers: Mapping[str, str] | None = ...,
27864
+ retries: int | None = ...,
27865
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27866
+ ) -> RedfinSearchResponse: ...
27867
+ @overload
27868
+ def request(
27869
+ self,
27870
+ operation_id: Literal['redfin-similar'],
27871
+ params: RedfinSimilarParams,
27872
+ *,
27873
+ response_type: ResponseType = ...,
27874
+ timeout: float | None = ...,
27875
+ headers: Mapping[str, str] | None = ...,
27876
+ retries: int | None = ...,
27877
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
27878
+ ) -> RedfinSimilarResponse: ...
27879
+ @overload
27334
27880
  def request(
27335
27881
  self,
27336
27882
  operation_id: Literal['referrals-click'],
@@ -28819,6 +29365,18 @@ class CrawloraClient:
28819
29365
  retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
28820
29366
  ) -> UserMeApiKeysRevealResponse: ...
28821
29367
  @overload
29368
+ def request(
29369
+ self,
29370
+ operation_id: Literal['web-scrape'],
29371
+ params: WebScrapeParams,
29372
+ *,
29373
+ response_type: ResponseType = ...,
29374
+ timeout: float | None = ...,
29375
+ headers: Mapping[str, str] | None = ...,
29376
+ retries: int | None = ...,
29377
+ retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
29378
+ ) -> WebScrapeResponse: ...
29379
+ @overload
28822
29380
  def request(
28823
29381
  self,
28824
29382
  operation_id: Literal['yahoo-finance-calendars'],
@@ -92,6 +92,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
92
92
  'produces': ['application/json'],
93
93
  'queryParams': [],
94
94
  'security': ['ApiKeyAuth']},
95
+ 'antibot-check': {'bodyParam': 'request',
96
+ 'bodyRequired': True,
97
+ 'consumes': ['application/json'],
98
+ 'formParams': [],
99
+ 'id': 'antibot-check',
100
+ 'method': 'POST',
101
+ 'path': '/diagnostics/antibot-check',
102
+ 'pathParams': [],
103
+ 'produces': ['application/json'],
104
+ 'queryParams': [],
105
+ 'security': ['ApiKeyAuth']},
95
106
  'apple-podcasts-charts': {'bodyParam': None,
96
107
  'bodyRequired': False,
97
108
  'consumes': ['application/json'],
@@ -2413,6 +2424,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
2413
2424
  'name': 'vs_currency',
2414
2425
  'type': 'string'}],
2415
2426
  'security': ['ApiKeyAuth']},
2427
+ 'contact': {'bodyParam': 'option',
2428
+ 'bodyRequired': True,
2429
+ 'consumes': ['application/json'],
2430
+ 'formParams': [],
2431
+ 'id': 'contact',
2432
+ 'method': 'POST',
2433
+ 'path': '/contact',
2434
+ 'pathParams': [],
2435
+ 'produces': ['application/json'],
2436
+ 'queryParams': [],
2437
+ 'security': ['ApiKeyAuth']},
2416
2438
  'datasets-google-map-businesses-facets': {'bodyParam': None,
2417
2439
  'bodyRequired': False,
2418
2440
  'consumes': ['application/json'],
@@ -5938,6 +5960,73 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
5938
5960
  'queryParams': [{'in': 'query', 'name': 'limit', 'type': 'integer'},
5939
5961
  {'in': 'query', 'name': 'after', 'type': 'string'}],
5940
5962
  'security': ['ApiKeyAuth']},
5963
+ 'redfin-estimate': {'bodyParam': None,
5964
+ 'bodyRequired': False,
5965
+ 'consumes': ['application/json'],
5966
+ 'formParams': [],
5967
+ 'id': 'redfin-estimate',
5968
+ 'method': 'GET',
5969
+ 'path': '/redfin/estimate',
5970
+ 'pathParams': [],
5971
+ 'produces': ['application/json'],
5972
+ 'queryParams': [{'in': 'query', 'name': 'property_id', 'required': True, 'type': 'string'}],
5973
+ 'security': ['ApiKeyAuth']},
5974
+ 'redfin-property': {'bodyParam': None,
5975
+ 'bodyRequired': False,
5976
+ 'consumes': ['application/json'],
5977
+ 'formParams': [],
5978
+ 'id': 'redfin-property',
5979
+ 'method': 'GET',
5980
+ 'path': '/redfin/property',
5981
+ 'pathParams': [],
5982
+ 'produces': ['application/json'],
5983
+ 'queryParams': [{'in': 'query', 'name': 'url', 'type': 'string'},
5984
+ {'in': 'query', 'name': 'property_id', 'type': 'string'},
5985
+ {'in': 'query', 'name': 'listing_id', 'type': 'string'}],
5986
+ 'security': ['ApiKeyAuth']},
5987
+ 'redfin-region-trends': {'bodyParam': None,
5988
+ 'bodyRequired': False,
5989
+ 'consumes': ['application/json'],
5990
+ 'formParams': [],
5991
+ 'id': 'redfin-region-trends',
5992
+ 'method': 'GET',
5993
+ 'path': '/redfin/region-trends',
5994
+ 'pathParams': [],
5995
+ 'produces': ['application/json'],
5996
+ 'queryParams': [{'in': 'query', 'name': 'region_id', 'required': True, 'type': 'integer'},
5997
+ {'in': 'query', 'name': 'region_type', 'type': 'integer'}],
5998
+ 'security': ['ApiKeyAuth']},
5999
+ 'redfin-search': {'bodyParam': None,
6000
+ 'bodyRequired': False,
6001
+ 'consumes': ['application/json'],
6002
+ 'formParams': [],
6003
+ 'id': 'redfin-search',
6004
+ 'method': 'GET',
6005
+ 'paginatable': True,
6006
+ 'path': '/redfin/search',
6007
+ 'pathParams': [],
6008
+ 'produces': ['application/json'],
6009
+ 'queryParams': [{'in': 'query', 'name': 'location', 'type': 'string'},
6010
+ {'in': 'query', 'name': 'page', 'type': 'integer'},
6011
+ {'in': 'query', 'name': 'region_id', 'type': 'integer'},
6012
+ {'in': 'query', 'name': 'region_type', 'type': 'integer'},
6013
+ {'in': 'query', 'name': 'status', 'type': 'string'},
6014
+ {'in': 'query', 'name': 'min_price', 'type': 'integer'},
6015
+ {'in': 'query', 'name': 'max_price', 'type': 'integer'},
6016
+ {'in': 'query', 'name': 'min_beds', 'type': 'integer'},
6017
+ {'in': 'query', 'name': 'min_baths', 'type': 'number'}],
6018
+ 'security': ['ApiKeyAuth']},
6019
+ 'redfin-similar': {'bodyParam': None,
6020
+ 'bodyRequired': False,
6021
+ 'consumes': ['application/json'],
6022
+ 'formParams': [],
6023
+ 'id': 'redfin-similar',
6024
+ 'method': 'GET',
6025
+ 'path': '/redfin/similar',
6026
+ 'pathParams': [],
6027
+ 'produces': ['application/json'],
6028
+ 'queryParams': [{'in': 'query', 'name': 'property_id', 'required': True, 'type': 'string'}],
6029
+ 'security': ['ApiKeyAuth']},
5941
6030
  'referrals-click': {'bodyParam': 'request',
5942
6031
  'bodyRequired': True,
5943
6032
  'consumes': ['application/json'],
@@ -7763,6 +7852,17 @@ OPERATIONS = {'airbnb-room': {'bodyParam': None,
7763
7852
  'produces': ['application/json'],
7764
7853
  'queryParams': [],
7765
7854
  'security': ['JWTAuth']},
7855
+ 'web-scrape': {'bodyParam': 'scrapeOption',
7856
+ 'bodyRequired': True,
7857
+ 'consumes': ['application/json'],
7858
+ 'formParams': [],
7859
+ 'id': 'web-scrape',
7860
+ 'method': 'POST',
7861
+ 'path': '/web/scrape',
7862
+ 'pathParams': [],
7863
+ 'produces': ['application/json'],
7864
+ 'queryParams': [],
7865
+ 'security': ['ApiKeyAuth']},
7766
7866
  'yahoo-finance-calendar': {'bodyParam': None,
7767
7867
  'bodyRequired': False,
7768
7868
  'consumes': ['application/json'],
@@ -8762,6 +8862,11 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8762
8862
  'trends': 'reddit-trends',
8763
8863
  'user_comments': 'reddit-user-comments',
8764
8864
  'user_posts': 'reddit-user-posts'},
8865
+ 'redfin': {'estimate': 'redfin-estimate',
8866
+ 'property': 'redfin-property',
8867
+ 'region_trends': 'redfin-region-trends',
8868
+ 'search': 'redfin-search',
8869
+ 'similar': 'redfin-similar'},
8765
8870
  'referrals': {'click': 'referrals-click', 'me': 'referrals-me', 'me_events': 'referrals-me-events'},
8766
8871
  'rotten_tomatoes': {'rottentomatoes_browse_movies': 'rottentomatoes-browse-movies',
8767
8872
  'rottentomatoes_browse_tv': 'rottentomatoes-browse-tv',
@@ -8883,6 +8988,7 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8883
8988
  'me_api_keys': 'user-me-api-keys',
8884
8989
  'me_api_keys_reveal': 'user-me-api-keys-reveal',
8885
8990
  'me_api_keys_rotate': 'user-me-api-keys-rotate'},
8991
+ 'web': {'antibot_check': 'antibot-check', 'contact': 'contact', 'scrape': 'web-scrape'},
8886
8992
  'yahoo_finance': {'calendar': 'yahoo-finance-calendar',
8887
8993
  'calendars': 'yahoo-finance-calendars',
8888
8994
  'download': 'yahoo-finance-download',
@@ -8937,7 +9043,7 @@ GROUPS = {'airbnb': {'room': 'airbnb-room',
8937
9043
  'video': 'youtube-video'},
8938
9044
  'zillow': {'autocomplete': 'zillow-autocomplete', 'property': 'zillow-property', 'search': 'zillow-search'}}
8939
9045
 
8940
- OPERATION_COUNT = 491
9046
+ OPERATION_COUNT = 499
8941
9047
 
8942
9048
  class OperationId:
8943
9049
  AIRBNB_ROOM = 'airbnb-room'
@@ -9252,6 +9358,11 @@ class OperationId:
9252
9358
  REDDIT_TRENDS = 'reddit-trends'
9253
9359
  REDDIT_USER_COMMENTS = 'reddit-user-comments'
9254
9360
  REDDIT_USER_POSTS = 'reddit-user-posts'
9361
+ REDFIN_ESTIMATE = 'redfin-estimate'
9362
+ REDFIN_PROPERTY = 'redfin-property'
9363
+ REDFIN_REGION_TRENDS = 'redfin-region-trends'
9364
+ REDFIN_SEARCH = 'redfin-search'
9365
+ REDFIN_SIMILAR = 'redfin-similar'
9255
9366
  REFERRALS_CLICK = 'referrals-click'
9256
9367
  REFERRALS_ME = 'referrals-me'
9257
9368
  REFERRALS_ME_EVENTS = 'referrals-me-events'
@@ -9376,6 +9487,9 @@ class OperationId:
9376
9487
  USER_ME_API_KEYS = 'user-me-api-keys'
9377
9488
  USER_ME_API_KEYS_REVEAL = 'user-me-api-keys-reveal'
9378
9489
  USER_ME_API_KEYS_ROTATE = 'user-me-api-keys-rotate'
9490
+ WEB_ANTIBOT_CHECK = 'antibot-check'
9491
+ WEB_CONTACT = 'contact'
9492
+ WEB_SCRAPE = 'web-scrape'
9379
9493
  YAHOO_FINANCE_CALENDAR = 'yahoo-finance-calendar'
9380
9494
  YAHOO_FINANCE_CALENDARS = 'yahoo-finance-calendars'
9381
9495
  YAHOO_FINANCE_DOWNLOAD = 'yahoo-finance-download'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crawlora
3
- Version: 1.7.0.dev1
3
+ Version: 1.8.0.dev2
4
4
  Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
5
5
  Author: Crawlora
6
6
  License-Expression: MIT
@@ -27,7 +27,7 @@ Dynamic: license-file
27
27
  # Crawlora Python SDK
28
28
 
29
29
  Python client for the public Crawlora API. Use it to call Crawlora scraping,
30
- search, social, marketplace, media, maps, finance, brand, and usage endpoints
30
+ search, social, marketplace, media, maps, finance, prediction-market, brand, and usage endpoints
31
31
  with generated type stubs for editor and type-checker support.
32
32
 
33
33
  - Runtime: Python 3.10+
@@ -38,7 +38,7 @@ with generated type stubs for editor and type-checker support.
38
38
  ## Install
39
39
 
40
40
  Published on [PyPI](https://pypi.org/project/crawlora/). The current release is a
41
- prerelease (`1.5.0.dev3`), so install it with `--pre`:
41
+ prerelease (`1.7.0.dev1`), so install it with `--pre`:
42
42
 
43
43
  ```sh
44
44
  pip install --pre crawlora
@@ -2,7 +2,7 @@
2
2
 
3
3
  Generated from `openapi/public.json`. Deprecated, admin, and internal operations are excluded from this SDK contract.
4
4
 
5
- Total operations: `491`
5
+ Total operations: `499`
6
6
 
7
7
  | Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
8
8
  | --- | --- | --- | --- | --- | --- | --- | --- |
@@ -89,6 +89,9 @@ Total operations: `491`
89
89
  | coin_gecko | `coin_gecko.token_unlocks` | `coingecko-token-unlocks` | `GET /coingecko/token-unlocks` | `limit` (query int) | `ApiKeyAuth` | `CoinGeckoTokenUnlocksResponse` | |
90
90
  | coin_gecko | `coin_gecko.treasuries` | `coingecko-treasuries` | `GET /coingecko/treasuries` | `asset` (query Literal['all', 'bitcoin', 'ethereum', 'solana', 'bnb', 'xrp', 'tron'])<br>`holder_type` (query Literal['all', 'companies', 'governments'])<br>`limit` (query int)<br>`vs_currency` (query Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']) | `ApiKeyAuth` | `CoinGeckoTreasuriesResponse` | |
91
91
  | coin_gecko | `coin_gecko.trending` | `coingecko-trending` | `GET /coingecko/trending` | `limit` (query int)<br>`vs_currency` (query Literal['btc', 'eth', 'ltc', 'bch', 'bnb', 'eos', 'xrp', 'xlm', 'link', 'dot', 'yfi', 'sol', 'usd', 'aed', 'ars', 'aud', 'bdt', 'bhd', 'bmd', 'brl', 'cad', 'chf', 'clp', 'cny', 'czk', 'dkk', 'eur', 'gbp', 'gel', 'hkd', 'huf', 'idr', 'ils', 'inr', 'jpy', 'krw', 'kwd', 'lkr', 'mmk', 'mxn', 'myr', 'ngn', 'nok', 'nzd', 'php', 'pkr', 'pln', 'rub', 'sar', 'sek', 'sgd', 'thb', 'try', 'twd', 'uah', 'vef', 'vnd', 'zar', 'xdr', 'xag', 'xau', 'bits', 'sats']) | `ApiKeyAuth` | `CoinGeckoTrendingResponse` | |
92
+ | web | `web.contact` | `contact` | `POST /contact` | `option` (body str required) | `ApiKeyAuth` | `WebContactResponse` | |
93
+ | web | `web.antibot_check` | `antibot-check` | `POST /diagnostics/antibot-check` | `request` (body str required) | `ApiKeyAuth` | `WebAntibotCheckResponse` | |
94
+ | web | `web.scrape` | `web-scrape` | `POST /web/scrape` | `scrapeOption` (body str required) | `ApiKeyAuth` | `WebScrapeResponse` | |
92
95
  | datasets | `datasets.list` | `datasets-list` | `GET /datasets` | none | `ApiKeyAuth` | `DatasetsListResponse` | |
93
96
  | datasets | `datasets.google_map_businesses_facets` | `datasets-google-map-businesses-facets` | `GET /datasets/google-map-businesses/facets` | `facet` (query str required)<br>`q` (query str)<br>`category` (query str)<br>`country` (query str)<br>`state` (query str)<br>`county` (query str)<br>`city` (query str)<br>`town` (query str)<br>`min_rating` (query float)<br>`min_review_count` (query int)<br>`has_website` (query bool)<br>`has_phone` (query bool)<br>`lat` (query float)<br>`lon` (query float)<br>`radius_m` (query int)<br>`sort` (query str) | `ApiKeyAuth` | `DatasetsGoogleMapBusinessesFacetsResponse` | |
94
97
  | datasets | `datasets.google_map_businesses_item` | `datasets-google-map-businesses-item` | `GET /datasets/google-map-businesses/items/{place_id}` | `place_id` (path str required) | `ApiKeyAuth` | `DatasetsGoogleMapBusinessesItemResponse` | |
@@ -318,6 +321,11 @@ Total operations: `491`
318
321
  | reddit | `reddit.trends` | `reddit-trends` | `GET /reddit/trends` | `sort` (query Literal['hot', 'new', 'rising', 'top'])<br>`time` (query Literal['hour', 'day', 'week', 'month', 'year', 'all'])<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditTrendsResponse` | |
319
322
  | reddit | `reddit.user_comments` | `reddit-user-comments` | `GET /reddit/user/{username}/comments` | `username` (path str required)<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditUserCommentsResponse` | |
320
323
  | reddit | `reddit.user_posts` | `reddit-user-posts` | `GET /reddit/user/{username}/posts` | `username` (path str required)<br>`limit` (query int)<br>`after` (query str) | `ApiKeyAuth` | `RedditUserPostsResponse` | |
324
+ | redfin | `redfin.estimate` | `redfin-estimate` | `GET /redfin/estimate` | `property_id` (query str required) | `ApiKeyAuth` | `RedfinEstimateResponse` | |
325
+ | redfin | `redfin.property` | `redfin-property` | `GET /redfin/property` | `url` (query str)<br>`property_id` (query str)<br>`listing_id` (query str) | `ApiKeyAuth` | `RedfinPropertyResponse` | |
326
+ | redfin | `redfin.region_trends` | `redfin-region-trends` | `GET /redfin/region-trends` | `region_id` (query int required)<br>`region_type` (query int) | `ApiKeyAuth` | `RedfinRegionTrendsResponse` | |
327
+ | redfin | `redfin.search` | `redfin-search` | `GET /redfin/search` | `location` (query str)<br>`page` (query int)<br>`region_id` (query int)<br>`region_type` (query int)<br>`status` (query str)<br>`min_price` (query int)<br>`max_price` (query int)<br>`min_beds` (query int)<br>`min_baths` (query float) | `ApiKeyAuth` | `RedfinSearchResponse` | |
328
+ | redfin | `redfin.similar` | `redfin-similar` | `GET /redfin/similar` | `property_id` (query str required) | `ApiKeyAuth` | `RedfinSimilarResponse` | |
321
329
  | referrals | `referrals.click` | `referrals-click` | `POST /referrals/click` | `request` (body str required) | none | `ReferralsClickResponse` | |
322
330
  | referrals | `referrals.me` | `referrals-me` | `GET /referrals/me` | none | `JWTAuth` | `ReferralsMeResponse` | |
323
331
  | referrals | `referrals.me_events` | `referrals-me-events` | `GET /referrals/me/events` | `limit` (query int) | `JWTAuth` | `ReferralsMeEventsResponse` | |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "crawlora"
7
- version = "1.7.0.dev1"
7
+ version = "1.8.0.dev2"
8
8
  description = "Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -267,7 +267,7 @@ class CrawloraClientTest(unittest.TestCase):
267
267
  self.assertIs(raised.exception.__cause__, cause)
268
268
 
269
269
  def test_operation_metadata_count(self):
270
- self.assertEqual(OPERATION_COUNT, 491)
270
+ self.assertEqual(OPERATION_COUNT, 499)
271
271
 
272
272
  def test_deprecated_endpoints_are_not_generated(self):
273
273
  self.assertFalse(hasattr(CrawloraClient(api_key="api_test", base_url=self.base_url).google, "lens"))
@@ -296,7 +296,7 @@ class CrawloraClientTest(unittest.TestCase):
296
296
  recipes_doc = root.joinpath("docs", "recipes.md").read_text()
297
297
 
298
298
  for expected in [
299
- "Total operations: `491`",
299
+ "Total operations: `499`",
300
300
  "`bing-search`",
301
301
  "`GET /bing/search`",
302
302
  "`bing.search`",
File without changes
File without changes
File without changes