scavio 0.30.1 → 0.31.0

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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Scavio
2
2
 
3
3
  TypeScript SDK for the [Scavio API](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — real-time structured web
4
- data across 38 platforms on one API key, plus `extract()` to read
4
+ data across 42 platforms on one API key, plus `extract()` to read
5
5
  any URL as clean Markdown, and `extract.map()` / `extract.crawl()` /
6
6
  `extract.batch()` to map, crawl and batch-extract whole websites.
7
7
 
@@ -9,7 +9,7 @@ Structured JSON in, structured JSON out. No per-site parsers to maintain.
9
9
 
10
10
  - **Search and SERP** — Google (organic, news, maps, shopping, flights, hotels, trends, AI Mode)
11
11
  - **AI assistants** — ChatGPT and Gemini answers with the sources they cite and the products they recommend
12
- - **E-commerce** — Amazon, Walmart, Costco, Mercado Libre, eBay, Target, Home Depot, TikTok Shop
12
+ - **E-commerce** — Amazon, Walmart, Costco, Lowe's, Sam's Club, Canadian Tire, Dollar General, Mercado Libre, eBay, Target, Home Depot, TikTok Shop
13
13
  - **Real estate and travel** — Zillow, Redfin, Realtor.com, Rightmove, Booking, Airbnb, Tripadvisor
14
14
  - **Reviews and local** — Trustpilot, Yelp, G2, Capterra, Glassdoor, App Store, Google Play
15
15
  - **Jobs and companies** — Indeed, Glassdoor, SEC EDGAR, Companies House
@@ -504,6 +504,55 @@ warehouses on us and 2 per warehouse on ca). The clearance price codes are the
504
504
  member-community decode of Costco shelf prices; Costco does not publish them,
505
505
  and only items Costco lists online are covered.
506
506
 
507
+ ### Lowe's, Sam's Club, Canadian Tire and Dollar General
508
+
509
+ Four store-level retailers, new in 0.31.0. Each call answers for ONE store you
510
+ choose: get its number from the locator (`lowes.stores`, `samsClub.clubs`,
511
+ `canadianTire.stores`, `dollarGeneral.stores`) and pass it on every call.
512
+
513
+ ```typescript
514
+ // Lowe's: store_id AND that store's own ZIP are required on search/product.
515
+ const lowesStores = await client.lowes.stores({ zip: "28117", limit: 1 });
516
+ const store = (lowesStores.data as any).stores[0];
517
+ const sid = store.store_id; // "0595"
518
+ const zip = store.address.postal_code; // "28117"
519
+ await client.lowes.search({ query: "cordless drill", store_id: sid, zip });
520
+ await client.lowes.search({ query: "cordless drill", store_id: sid, zip, on_sale: true }); // that store's deals
521
+ await client.lowes.product({ item_id: "5016412045", store_id: sid, zip }); // stock, aisle_locations, nearby stores
522
+ await client.lowes.reviews({ item_id: "5016412045", sort: "most_helpful" });
523
+
524
+ // Sam's Club: search, savings and category answer for a club picked by
525
+ // location (echoed in data.club). product({ club_id }) targets one club.
526
+ await client.samsClub.clubs({ zip: "75201", limit: 5 });
527
+ await client.samsClub.search({ query: "paper towels", sort: "price_low" });
528
+ await client.samsClub.product({ item_id: "15325822107", club_id: "6372" }); // club_price, in_stock_at_club
529
+ await client.samsClub.savings({ sort: "top_selling" }); // Instant Savings
530
+ await client.samsClub.category({ category_id: "1150109" }); // clearance
531
+ await client.samsClub.reviews({ item_id: "15325822107", sort: "lowest" });
532
+
533
+ // Canadian Tire: prices in CAD, per store and province.
534
+ await client.canadianTire.stores({ postal_code: "M5V 2T6", sku: "0438858" }); // + quantity and aisle per store
535
+ await client.canadianTire.search({ query: "dewalt drill", store_id: "600" });
536
+ await client.canadianTire.product({ product_code: "0547273P", store_id: "600" });
537
+ await client.canadianTire.availability({ store_id: "600", skus: ["0438858", "0547273"] }); // up to 50
538
+ await client.canadianTire.clearance({ store_id: "600" }); // in-stock only by default
539
+ await client.canadianTire.deals({ store_id: "600", type: "sale" }); // or instant_rebate, special_buy, loyalty
540
+
541
+ // Dollar General: one stores() call with a upc gives that product's unit
542
+ // count at up to 25 nearby stores.
543
+ await client.dollarGeneral.stores({ zip: "75203", upc: "030772156629" });
544
+ await client.dollarGeneral.search({ query: "paper towels", store_id: "12629", in_stock_only: true });
545
+ await client.dollarGeneral.product({ upc: "030772156629", store_id: "12629" });
546
+ await client.dollarGeneral.deals({ store_id: "12629", type: "clearance" }); // or on_sale
547
+ await client.dollarGeneral.coupons();
548
+ ```
549
+
550
+ Lowe's `search`, `product` and `stores` cost 2 credits and `reviews` 1; every
551
+ Sam's Club, Canadian Tire and Dollar General call costs 1. Sam's Club caps
552
+ `available_quantity` at 8 (8 means 8 or more). Dollar General clearance items
553
+ carry the current price only, with no was-price. Canadian Tire and Dollar
554
+ General return a rating and review count but no review text.
555
+
507
556
  ### [Mercado Libre](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme)
508
557
 
509
558
  Five endpoints, new in 0.21.0: `reviews` costs 1 credit, the other four 2. The
package/dist/index.cjs CHANGED
@@ -36,11 +36,13 @@ __export(index_exports, {
36
36
  AppStoreNamespace: () => AppStoreNamespace,
37
37
  BadRequestError: () => BadRequestError,
38
38
  BookingNamespace: () => BookingNamespace,
39
+ CanadianTireNamespace: () => CanadianTireNamespace,
39
40
  CapterraNamespace: () => CapterraNamespace,
40
41
  ChatgptNamespace: () => ChatgptNamespace,
41
42
  CompaniesHouseNamespace: () => CompaniesHouseNamespace,
42
43
  CostcoNamespace: () => CostcoNamespace,
43
44
  DEFAULT_MAX_REQUESTS_PER_SECOND: () => DEFAULT_MAX_REQUESTS_PER_SECOND,
45
+ DollarGeneralNamespace: () => DollarGeneralNamespace,
44
46
  EbayNamespace: () => EbayNamespace,
45
47
  ExtractNamespace: () => ExtractNamespace,
46
48
  G2Namespace: () => G2Namespace,
@@ -58,6 +60,7 @@ __export(index_exports, {
58
60
  KrogerNamespace: () => KrogerNamespace,
59
61
  KuaishouNamespace: () => KuaishouNamespace,
60
62
  LinkedInNamespace: () => LinkedInNamespace,
63
+ LowesNamespace: () => LowesNamespace,
61
64
  MAX_REQUESTS_PER_SECOND: () => MAX_REQUESTS_PER_SECOND,
62
65
  MercadoLibreNamespace: () => MercadoLibreNamespace,
63
66
  MetaAdsNamespace: () => MetaAdsNamespace,
@@ -69,6 +72,7 @@ __export(index_exports, {
69
72
  RedfinNamespace: () => RedfinNamespace,
70
73
  RightmoveNamespace: () => RightmoveNamespace,
71
74
  SECNamespace: () => SECNamespace,
75
+ SamsClubNamespace: () => SamsClubNamespace,
72
76
  Scavio: () => Scavio,
73
77
  ScavioAPIError: () => ScavioAPIError,
74
78
  ScavioConnectionError: () => ScavioConnectionError,
@@ -237,7 +241,7 @@ function parseRetryAfter(header) {
237
241
  var BASE_URL = "https://api.scavio.dev";
238
242
  var DEFAULT_TIMEOUT = 3e4;
239
243
  var DEFAULT_MAX_RETRIES = 2;
240
- var SDK_VERSION = true ? "0.30.1" : "0.0.0";
244
+ var SDK_VERSION = true ? "0.31.0" : "0.0.0";
241
245
  var USER_AGENT = `scavio-js/${SDK_VERSION}`;
242
246
  function isServerRuntime() {
243
247
  const g = globalThis;
@@ -2891,6 +2895,259 @@ var SpecsNamespace = class {
2891
2895
  }
2892
2896
  };
2893
2897
 
2898
+ // src/namespaces/lowes.ts
2899
+ var LowesNamespace = class {
2900
+ constructor(client) {
2901
+ this.client = client;
2902
+ }
2903
+ client;
2904
+ /**
2905
+ * Search Lowe's by keyword or category at one store: the store's price,
2906
+ * was-price and savings with the sale end date, brand, model number, rating,
2907
+ * review count, and stock for pickup, truck delivery, parcel shipping and
2908
+ * same-day delivery. Pass query or category_id; on_sale returns that
2909
+ * store's deals.
2910
+ *
2911
+ * Costs 2 credits.
2912
+ */
2913
+ async search(options) {
2914
+ return this.client._post("/api/v1/lowes/search", options);
2915
+ }
2916
+ /**
2917
+ * One Lowe's item at one store: price, was-price and savings, on-hand stock
2918
+ * with lead time per fulfillment method, stock at nearby stores, aisle and
2919
+ * bay, grouped specifications, UPC, dimensions, weight, rating, images, and
2920
+ * the store's hours.
2921
+ *
2922
+ * Costs 2 credits.
2923
+ */
2924
+ async product(options) {
2925
+ return this.client._post("/api/v1/lowes/product", options);
2926
+ }
2927
+ /**
2928
+ * Lowe's stores near a ZIP code, nearest first: store_id, name, address,
2929
+ * phone, coordinates, distance, time zone, opening hours and features.
2930
+ *
2931
+ * Costs 2 credits.
2932
+ */
2933
+ async stores(options) {
2934
+ return this.client._post("/api/v1/lowes/stores", options);
2935
+ }
2936
+ /**
2937
+ * One page of an item's customer reviews (10 per page): rating, title, text,
2938
+ * date, reviewer, recommended, helpful votes, verified and incentivized
2939
+ * flags, photos and brand replies, plus the average rating and count per star.
2940
+ *
2941
+ * Costs 1 credit.
2942
+ */
2943
+ async reviews(options) {
2944
+ return this.client._post("/api/v1/lowes/reviews", options);
2945
+ }
2946
+ };
2947
+
2948
+ // src/namespaces/sams-club.ts
2949
+ var SamsClubNamespace = class {
2950
+ constructor(client) {
2951
+ this.client = client;
2952
+ }
2953
+ client;
2954
+ /**
2955
+ * Search Sam's Club: item_id, price, was_price, savings_amount, unit price,
2956
+ * Instant Savings (amount, end date, purchase limit), rating, review count,
2957
+ * stock, pickup/delivery/shipping availability and aisle. The club is picked
2958
+ * by location and returned in data.club.
2959
+ *
2960
+ * Costs 1 credit.
2961
+ */
2962
+ async search(options) {
2963
+ return this.client._post("/api/v1/samsclub/search", options);
2964
+ }
2965
+ /**
2966
+ * One Sam's Club item: online price and the club shelf price (club_price)
2967
+ * with was price, savings and unit price, Instant Savings, rating histogram,
2968
+ * UPC, model, specifications, and per-method fulfillment with stock and
2969
+ * aisle. Pass club_id to price and stock a specific club.
2970
+ *
2971
+ * Costs 1 credit.
2972
+ */
2973
+ async product(options) {
2974
+ return this.client._post("/api/v1/samsclub/product", options);
2975
+ }
2976
+ /**
2977
+ * Sam's Club clubs near a US ZIP, nearest first: club_id, name, address,
2978
+ * coordinates, distance in miles, phone, opening hours, services and whether
2979
+ * the club is temporarily closed.
2980
+ *
2981
+ * Costs 1 credit.
2982
+ */
2983
+ async clubs(options) {
2984
+ return this.client._post("/api/v1/samsclub/clubs", options);
2985
+ }
2986
+ /**
2987
+ * Every item on Sam's Club Instant Savings, paged: price, was price and
2988
+ * savings amount, plus each offer's amount, end date, purchase limit and
2989
+ * channels.
2990
+ *
2991
+ * Costs 1 credit.
2992
+ */
2993
+ async savings(options = {}) {
2994
+ return this.client._post("/api/v1/samsclub/savings", options);
2995
+ }
2996
+ /**
2997
+ * Products in a Sam's Club category, paged, with the same fields as
2998
+ * search(). Clearance is category "1150109".
2999
+ *
3000
+ * Costs 1 credit.
3001
+ */
3002
+ async category(options) {
3003
+ return this.client._post("/api/v1/samsclub/category", options);
3004
+ }
3005
+ /**
3006
+ * Customer reviews for a Sam's Club item, 10 per page: rating, title, text,
3007
+ * author, date, verified purchase and helpful votes, plus the average rating,
3008
+ * total count and 1-5 star breakdown.
3009
+ *
3010
+ * Costs 1 credit.
3011
+ */
3012
+ async reviews(options) {
3013
+ return this.client._post("/api/v1/samsclub/reviews", options);
3014
+ }
3015
+ };
3016
+
3017
+ // src/namespaces/canadian-tire.ts
3018
+ var CanadianTireNamespace = class {
3019
+ constructor(client) {
3020
+ this.client = client;
3021
+ }
3022
+ client;
3023
+ /**
3024
+ * Search Canadian Tire by keyword or category at one store: the store's
3025
+ * price and regular price (CAD), price range for multi-variant items,
3026
+ * savings, badges (clearance, sale, rebate), rating, review count, brand,
3027
+ * part number, SKU, and stock at the store and online.
3028
+ *
3029
+ * Costs 1 credit.
3030
+ */
3031
+ async search(options) {
3032
+ return this.client._post("/api/v1/canadiantire/search", options);
3033
+ }
3034
+ /**
3035
+ * One product by code at one store: breadcrumb, images, rating, review
3036
+ * count, descriptions, features, specifications, price and regular price,
3037
+ * warranty, manuals, variants with their SKUs, and the store's price, stock,
3038
+ * and pickup and ship-to-home dates.
3039
+ *
3040
+ * Costs 1 credit.
3041
+ */
3042
+ async product(options) {
3043
+ return this.client._post("/api/v1/canadiantire/product", options);
3044
+ }
3045
+ /**
3046
+ * Canadian Tire stores near a postal code or coordinates, nearest first:
3047
+ * store_id, name, address, phone, coordinates, distance, weekly hours and
3048
+ * services. Pass sku to get each store's stock quantity and aisle for it.
3049
+ *
3050
+ * Costs 1 credit.
3051
+ */
3052
+ async stores(options) {
3053
+ return this.client._post("/api/v1/canadiantire/stores", options);
3054
+ }
3055
+ /**
3056
+ * Up to 50 SKUs at one store in one call: the store's price and regular
3057
+ * price, clearance and sale flags, price valid-until date, stock quantity,
3058
+ * aisle, online stock, and pickup and delivery dates. Unknown SKUs are
3059
+ * listed in not_found.
3060
+ *
3061
+ * Costs 1 credit.
3062
+ */
3063
+ async availability(options) {
3064
+ return this.client._post("/api/v1/canadiantire/availability", options);
3065
+ }
3066
+ /**
3067
+ * Every clearance item at one store, 100 per page, with clearance price,
3068
+ * regular price, stock at the store and the same fields as search().
3069
+ * In-stock items only by default.
3070
+ *
3071
+ * Costs 1 credit.
3072
+ */
3073
+ async clearance(options) {
3074
+ return this.client._post("/api/v1/canadiantire/clearance", options);
3075
+ }
3076
+ /**
3077
+ * Items on a deal at one store, 100 per page: sale prices, instant rebates,
3078
+ * special buys or Triangle Rewards loyalty offers, with the same fields as
3079
+ * search().
3080
+ *
3081
+ * Costs 1 credit.
3082
+ */
3083
+ async deals(options) {
3084
+ return this.client._post("/api/v1/canadiantire/deals", options);
3085
+ }
3086
+ };
3087
+
3088
+ // src/namespaces/dollar-general.ts
3089
+ var DollarGeneralNamespace = class {
3090
+ constructor(client) {
3091
+ this.client = client;
3092
+ }
3093
+ client;
3094
+ /**
3095
+ * Search Dollar General at one store: that store's price and original price,
3096
+ * available_quantity (units on hand at that store), inventory_status,
3097
+ * rating, review count, categories, digital coupons and promotions, UPC and
3098
+ * product URL.
3099
+ *
3100
+ * Costs 1 credit.
3101
+ */
3102
+ async search(options) {
3103
+ return this.client._post("/api/v1/dollargeneral/search", options);
3104
+ }
3105
+ /**
3106
+ * One product by UPC at one store: price, original price,
3107
+ * available_quantity, stock_status, nearby_stores_with_stock, rating, review
3108
+ * count, SKU, brand, description, highlights, images, categories, digital
3109
+ * coupons and promotions. An unknown UPC or store number is a 404.
3110
+ *
3111
+ * Costs 1 credit.
3112
+ */
3113
+ async product(options) {
3114
+ return this.client._post("/api/v1/dollargeneral/product", options);
3115
+ }
3116
+ /**
3117
+ * Dollar General stores near a US ZIP code or coordinates, nearest first (up
3118
+ * to 25): store_id, address, phone, coordinates, distance in miles, opening
3119
+ * hours and services. Pass upc and each store also carries its unit count of
3120
+ * that product.
3121
+ *
3122
+ * Costs 1 credit.
3123
+ */
3124
+ async stores(options) {
3125
+ return this.client._post("/api/v1/dollargeneral/stores", options);
3126
+ }
3127
+ /**
3128
+ * Products on sale or on clearance, priced and stocked at one store, 24 per
3129
+ * page. available_quantity > 0 means in stock at that store; the listing
3130
+ * covers the whole chain. Clearance items carry the current price only (no
3131
+ * was-price).
3132
+ *
3133
+ * Costs 1 credit.
3134
+ */
3135
+ async deals(options) {
3136
+ return this.client._post("/api/v1/dollargeneral/deals", options);
3137
+ }
3138
+ /**
3139
+ * Dollar General's current digital coupons, 30 per page: offer id and code,
3140
+ * summary, description, brand, company, value, offer type, category, minimum
3141
+ * quantity, start and expiration dates, and whether it is a manufacturer
3142
+ * coupon.
3143
+ *
3144
+ * Costs 1 credit.
3145
+ */
3146
+ async coupons(options = {}) {
3147
+ return this.client._post("/api/v1/dollargeneral/coupons", options);
3148
+ }
3149
+ };
3150
+
2894
3151
  // src/namespaces/trustpilot.ts
2895
3152
  var TrustpilotNamespace = class {
2896
3153
  constructor(client) {
@@ -3406,6 +3663,10 @@ var Scavio = class extends ScavioCore {
3406
3663
  kroger;
3407
3664
  decathlon;
3408
3665
  specs;
3666
+ lowes;
3667
+ samsClub;
3668
+ canadianTire;
3669
+ dollarGeneral;
3409
3670
  trustpilot;
3410
3671
  chatgpt;
3411
3672
  gemini;
@@ -3469,6 +3730,10 @@ var Scavio = class extends ScavioCore {
3469
3730
  this.kroger = new KrogerNamespace(this);
3470
3731
  this.decathlon = new DecathlonNamespace(this);
3471
3732
  this.specs = new SpecsNamespace(this);
3733
+ this.lowes = new LowesNamespace(this);
3734
+ this.samsClub = new SamsClubNamespace(this);
3735
+ this.canadianTire = new CanadianTireNamespace(this);
3736
+ this.dollarGeneral = new DollarGeneralNamespace(this);
3472
3737
  this.trustpilot = new TrustpilotNamespace(this);
3473
3738
  this.chatgpt = new ChatgptNamespace(this);
3474
3739
  this.gemini = new GeminiNamespace(this);
@@ -3584,11 +3849,13 @@ async function getSubtle() {
3584
3849
  AppStoreNamespace,
3585
3850
  BadRequestError,
3586
3851
  BookingNamespace,
3852
+ CanadianTireNamespace,
3587
3853
  CapterraNamespace,
3588
3854
  ChatgptNamespace,
3589
3855
  CompaniesHouseNamespace,
3590
3856
  CostcoNamespace,
3591
3857
  DEFAULT_MAX_REQUESTS_PER_SECOND,
3858
+ DollarGeneralNamespace,
3592
3859
  EbayNamespace,
3593
3860
  ExtractNamespace,
3594
3861
  G2Namespace,
@@ -3606,6 +3873,7 @@ async function getSubtle() {
3606
3873
  KrogerNamespace,
3607
3874
  KuaishouNamespace,
3608
3875
  LinkedInNamespace,
3876
+ LowesNamespace,
3609
3877
  MAX_REQUESTS_PER_SECOND,
3610
3878
  MercadoLibreNamespace,
3611
3879
  MetaAdsNamespace,
@@ -3617,6 +3885,7 @@ async function getSubtle() {
3617
3885
  RedfinNamespace,
3618
3886
  RightmoveNamespace,
3619
3887
  SECNamespace,
3888
+ SamsClubNamespace,
3620
3889
  Scavio,
3621
3890
  ScavioAPIError,
3622
3891
  ScavioConnectionError,