scavio 0.31.0 → 0.32.1

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 42 platforms on one API key, plus `extract()` to read
4
+ data across 52 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, Lowe's, Sam's Club, Canadian Tire, Dollar General, Mercado Libre, eBay, Target, Home Depot, TikTok Shop
12
+ - **E-commerce** — Amazon, Walmart, Costco, Lowe's, Sam's Club, Canadian Tire, Dollar General, Sephora, Ulta Beauty, ALDI, Micro Center, Walgreens, CVS, 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
@@ -553,6 +553,59 @@ Sam's Club, Canadian Tire and Dollar General call costs 1. Sam's Club caps
553
553
  carry the current price only, with no was-price. Canadian Tire and Dollar
554
554
  General return a rating and review count but no review text.
555
555
 
556
+ ### Sephora, Ulta Beauty, ALDI, Micro Center, Walgreens and CVS
557
+
558
+ Six US retailers, new in 0.32.0. Where prices or stock are per store, pass the
559
+ store number on the call (`aldi.stores`, `microCenter.stores`,
560
+ `walgreens.stores`; CVS has no locator).
561
+
562
+ ```typescript
563
+ // Sephora: 60 products per page. product() takes a result's url (faster)
564
+ // or its product_id, and returns a review summary with pro and con
565
+ // sentiment counts - no review text.
566
+ await client.sephora.search({ query: "lipstick", sort: "best_selling", zip: "10001" }); // + same_day_eligible
567
+ await client.sephora.category({ category: "lipstick" });
568
+ await client.sephora.product({ product_id: "P510799" });
569
+
570
+ // Ulta Beauty: stores() is in stock / out of stock for one shade or size at
571
+ // the 10 stores nearest a ZIP (no unit counts).
572
+ await client.ulta.search({ query: "lipstick" });
573
+ await client.ulta.category({ category: "/shop/makeup/lips/lipstick" });
574
+ await client.ulta.product({ url: "https://www.ulta.com/p/serum-lipstick-pimprod2057119", sku: "2648428" });
575
+ await client.ulta.stores({ product_id: "pimprod2057119", sku_id: "2648428", zip: "10001" });
576
+
577
+ // ALDI: prices are per store AND per service_type - instore (default, the
578
+ // shelf price), pickup or delivery (online prices, often higher).
579
+ await client.aldi.stores({ zip: "33131" });
580
+ await client.aldi.search({ query: "milk", store_id: "151248", service_type: "pickup" });
581
+ await client.aldi.product({ product_id: "16902710", store_id: "151248" });
582
+
583
+ // Micro Center: stock is per 3-digit store_id (web store 029 when omitted);
584
+ // counts are capped at 25+ (quantity_capped).
585
+ await client.microCenter.stores({ state: "TX" });
586
+ await client.microCenter.search({ query: "rtx 5070", store_id: "131" });
587
+ await client.microCenter.product({ product_id: "691231", store_id: "131" }); // open-box units, stores_in_stock
588
+
589
+ // Walgreens: prices are national; stock() checks up to 20 stores per call.
590
+ const wg = await client.walgreens.stores({ zip: "60614" });
591
+ const storeNumber = (wg.data as any).stores[0].store_number; // "15350"
592
+ await client.walgreens.search({ query: "shampoo", store_id: storeNumber });
593
+ await client.walgreens.product({ product_id: "300452904" });
594
+ await client.walgreens.stock({ product_id: "300452904", store_ids: [storeNumber] });
595
+
596
+ // CVS: no store locator - the store number is on every cvs.com store page
597
+ // ("Store ID: #7019"). search() defaults to store 7019 (New York).
598
+ await client.cvs.search({ query: "toothpaste", store_id: "7019" });
599
+ await client.cvs.product({ product_id: "832677" });
600
+ await client.cvs.stock({ sku_ids: ["832677"], store_id: "7019" });
601
+ ```
602
+
603
+ Sephora, Ulta Beauty, ALDI and CVS calls cost 1 credit each. Micro Center
604
+ `search` and `product` cost 2 and `stores` 1. Walgreens `search`, `product` and
605
+ `stores` cost 2 and `stock` 4. CVS `product` can take 10-30+ seconds, so it
606
+ raises the request timeout to `CVS_PRODUCT_TIMEOUT` (120s) when the client's is
607
+ shorter; it never lowers it.
608
+
556
609
  ### [Mercado Libre](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme)
557
610
 
558
611
  Five endpoints, new in 0.21.0: `reviews` costs 1 credit, the other four 2. The
package/dist/index.cjs CHANGED
@@ -32,15 +32,18 @@ var index_exports = {};
32
32
  __export(index_exports, {
33
33
  AI_PROMPT_TIMEOUT: () => AI_PROMPT_TIMEOUT,
34
34
  AirbnbNamespace: () => AirbnbNamespace,
35
+ AldiNamespace: () => AldiNamespace,
35
36
  AmazonNamespace: () => AmazonNamespace,
36
37
  AppStoreNamespace: () => AppStoreNamespace,
37
38
  BadRequestError: () => BadRequestError,
38
39
  BookingNamespace: () => BookingNamespace,
40
+ CVS_PRODUCT_TIMEOUT: () => CVS_PRODUCT_TIMEOUT,
39
41
  CanadianTireNamespace: () => CanadianTireNamespace,
40
42
  CapterraNamespace: () => CapterraNamespace,
41
43
  ChatgptNamespace: () => ChatgptNamespace,
42
44
  CompaniesHouseNamespace: () => CompaniesHouseNamespace,
43
45
  CostcoNamespace: () => CostcoNamespace,
46
+ CvsNamespace: () => CvsNamespace,
44
47
  DEFAULT_MAX_REQUESTS_PER_SECOND: () => DEFAULT_MAX_REQUESTS_PER_SECOND,
45
48
  DollarGeneralNamespace: () => DollarGeneralNamespace,
46
49
  EbayNamespace: () => EbayNamespace,
@@ -64,6 +67,7 @@ __export(index_exports, {
64
67
  MAX_REQUESTS_PER_SECOND: () => MAX_REQUESTS_PER_SECOND,
65
68
  MercadoLibreNamespace: () => MercadoLibreNamespace,
66
69
  MetaAdsNamespace: () => MetaAdsNamespace,
70
+ MicroCenterNamespace: () => MicroCenterNamespace,
67
71
  MissingAPIKeyError: () => MissingAPIKeyError,
68
72
  NotFoundError: () => NotFoundError,
69
73
  RateLimitError: () => RateLimitError,
@@ -79,12 +83,15 @@ __export(index_exports, {
79
83
  ScavioError: () => ScavioError,
80
84
  ScavioJobTimeoutError: () => ScavioJobTimeoutError,
81
85
  ScavioTimeoutError: () => ScavioTimeoutError,
86
+ SephoraNamespace: () => SephoraNamespace,
82
87
  TargetNamespace: () => TargetNamespace,
83
88
  ThreadsNamespace: () => ThreadsNamespace,
84
89
  TikTokNamespace: () => TikTokNamespace,
85
90
  TikTokShopNamespace: () => TikTokShopNamespace,
86
91
  TripadvisorNamespace: () => TripadvisorNamespace,
87
92
  TrustpilotNamespace: () => TrustpilotNamespace,
93
+ UltaNamespace: () => UltaNamespace,
94
+ WalgreensNamespace: () => WalgreensNamespace,
88
95
  WalmartNamespace: () => WalmartNamespace,
89
96
  XNamespace: () => XNamespace,
90
97
  YelpNamespace: () => YelpNamespace,
@@ -241,7 +248,7 @@ function parseRetryAfter(header) {
241
248
  var BASE_URL = "https://api.scavio.dev";
242
249
  var DEFAULT_TIMEOUT = 3e4;
243
250
  var DEFAULT_MAX_RETRIES = 2;
244
- var SDK_VERSION = true ? "0.31.0" : "0.0.0";
251
+ var SDK_VERSION = true ? "0.32.1" : "0.0.0";
245
252
  var USER_AGENT = `scavio-js/${SDK_VERSION}`;
246
253
  function isServerRuntime() {
247
254
  const g = globalThis;
@@ -3148,6 +3155,287 @@ var DollarGeneralNamespace = class {
3148
3155
  }
3149
3156
  };
3150
3157
 
3158
+ // src/namespaces/sephora.ts
3159
+ var SephoraNamespace = class {
3160
+ constructor(client) {
3161
+ this.client = client;
3162
+ }
3163
+ client;
3164
+ /**
3165
+ * Search sephora.com products, 60 per page: product id, sku id, brand, name,
3166
+ * URL, image, price, list and sale price (with a price range when sizes are
3167
+ * priced differently), value price for sets, rating, review count, extra
3168
+ * colors, and bestseller, new, exclusive, online-only, limited-edition and
3169
+ * sponsored flags. Pass zip for same-day delivery eligibility. Also returns
3170
+ * category facets and related searches.
3171
+ *
3172
+ * Costs 1 credit.
3173
+ */
3174
+ async search(options) {
3175
+ return this.client._post("/api/v1/sephora/search", options);
3176
+ }
3177
+ /**
3178
+ * Products in a sephora.com category, 60 per page, in the same shape as
3179
+ * search(), plus the category's id, name and URL, total product count,
3180
+ * parent category, subcategories with product counts and breadcrumbs. An
3181
+ * unknown category is a 404.
3182
+ *
3183
+ * Costs 1 credit.
3184
+ */
3185
+ async category(options) {
3186
+ return this.client._post("/api/v1/sephora/category", options);
3187
+ }
3188
+ /**
3189
+ * One sephora.com product: rating, review count, loves count, price range,
3190
+ * description, suggested usage, breadcrumbs, a summary of what reviews say
3191
+ * with pro and con sentiment counts (no review text), and every shade or
3192
+ * size as a sku with price, list and sale price, in_stock, only_few_left,
3193
+ * ingredients, images, and pickup and same-day eligibility. An unknown
3194
+ * product is a 404.
3195
+ *
3196
+ * Costs 1 credit.
3197
+ */
3198
+ async product(options) {
3199
+ return this.client._post("/api/v1/sephora/product", options);
3200
+ }
3201
+ };
3202
+
3203
+ // src/namespaces/ulta.ts
3204
+ var UltaNamespace = class {
3205
+ constructor(client) {
3206
+ this.client = client;
3207
+ }
3208
+ client;
3209
+ /**
3210
+ * Search Ulta Beauty by keyword, 64 products per page plus sponsored
3211
+ * placements: product_id, sku_id, brand, name, URL, image, list and sale
3212
+ * price (low end and range when shades are priced differently), discount,
3213
+ * promo text, rating, review count, badge, variant label, limited-stock and
3214
+ * sponsored flags.
3215
+ *
3216
+ * Costs 1 credit.
3217
+ */
3218
+ async search(options) {
3219
+ return this.client._post("/api/v1/ulta/search", options);
3220
+ }
3221
+ /**
3222
+ * Products in an Ulta Beauty category, 64 per page plus sponsored
3223
+ * placements, with the category title and total_results and the same
3224
+ * product fields as search().
3225
+ *
3226
+ * Costs 1 credit.
3227
+ */
3228
+ async category(options) {
3229
+ return this.client._post("/api/v1/ulta/category", options);
3230
+ }
3231
+ /**
3232
+ * One Ulta Beauty product for the selected shade or size: list and sale
3233
+ * price, discount, availability, GTIN, rating, review count, badges,
3234
+ * description, usage, ingredients, breadcrumbs, images, every shade or size
3235
+ * variant, ship / pickup / same-day eligibility and the five most recent
3236
+ * customer reviews. An unknown product is a 404.
3237
+ *
3238
+ * Costs 1 credit.
3239
+ */
3240
+ async product(options) {
3241
+ return this.client._post("/api/v1/ulta/product", options);
3242
+ }
3243
+ /**
3244
+ * In-store pickup availability of one shade or size at the 10 Ulta Beauty
3245
+ * stores nearest a US ZIP: store id, name, address, distance in miles, open
3246
+ * now and hours label, curbside label, in_stock and the availability label.
3247
+ * In stock / out of stock per store, not unit counts.
3248
+ *
3249
+ * Costs 1 credit.
3250
+ */
3251
+ async stores(options) {
3252
+ return this.client._post("/api/v1/ulta/stores", options);
3253
+ }
3254
+ };
3255
+
3256
+ // src/namespaces/aldi.ts
3257
+ var AldiNamespace = class {
3258
+ constructor(client) {
3259
+ this.client = client;
3260
+ }
3261
+ client;
3262
+ /**
3263
+ * Search ALDI US at one store (store_id, or the nearest store to a zip):
3264
+ * product_id, name, brand, size, price and was_price for that store and
3265
+ * service_type, discount label, unit price, in_stock and stock_level,
3266
+ * category, in-store aisle location, ALDI exclusive-brand flag, dietary
3267
+ * labels, image and URL. Exact matches only unless include_related is set.
3268
+ *
3269
+ * Costs 1 credit.
3270
+ */
3271
+ async search(options) {
3272
+ return this.client._post("/api/v1/aldi/search", options);
3273
+ }
3274
+ /**
3275
+ * One ALDI US product by id or aldi.us URL at one store: price and
3276
+ * was_price for that store and service_type, unit price, stock, category,
3277
+ * brand, size, description, ingredients, allergen warnings, dietary labels
3278
+ * and images. An unknown product id is a 404.
3279
+ *
3280
+ * Costs 1 credit.
3281
+ */
3282
+ async product(options) {
3283
+ return this.client._post("/api/v1/aldi/product", options);
3284
+ }
3285
+ /**
3286
+ * ALDI US stores near a ZIP code, nearest first: store_id (for search and
3287
+ * product), name, street address, city, state, ZIP, coordinates and
3288
+ * distance in miles.
3289
+ *
3290
+ * Costs 1 credit.
3291
+ */
3292
+ async stores(options) {
3293
+ return this.client._post("/api/v1/aldi/stores", options);
3294
+ }
3295
+ };
3296
+
3297
+ // src/namespaces/micro-center.ts
3298
+ var MicroCenterNamespace = class {
3299
+ constructor(client) {
3300
+ this.client = client;
3301
+ }
3302
+ client;
3303
+ /**
3304
+ * Search Micro Center by keyword or category at one store, up to 96 per
3305
+ * page: product_id, SKU, name, brand, category, price and original price,
3306
+ * image, URL, highlights, and that store's stock (label as printed,
3307
+ * quantity, quantity_capped at 25+, in_stock, not_carried). Open-box count
3308
+ * and lowest price, rebate text and an in_store_only flag where shown.
3309
+ *
3310
+ * Costs 2 credits.
3311
+ */
3312
+ async search(options) {
3313
+ return this.client._post("/api/v1/microcenter/search", options);
3314
+ }
3315
+ /**
3316
+ * One product by id or URL: SKU, MPN, UPC, description, price, original
3317
+ * price, ship and pickup flags, images, rating, up to 10 recent reviews,
3318
+ * breadcrumbs and the full spec table. selected_store carries the store's
3319
+ * stock and each open-box unit (condition, warranty, price); stores_in_stock
3320
+ * is a yes/no per Micro Center store, not a unit count. An unknown product
3321
+ * id is a 404.
3322
+ *
3323
+ * Costs 2 credits.
3324
+ */
3325
+ async product(options) {
3326
+ return this.client._post("/api/v1/microcenter/product", options);
3327
+ }
3328
+ /**
3329
+ * Every Micro Center store with its 3-digit store_id, name, city, state and
3330
+ * store page URL; street address and ZIP where known. Optionally filtered by
3331
+ * state. The web store 029 is not listed but is accepted as a store_id.
3332
+ *
3333
+ * Costs 1 credit.
3334
+ */
3335
+ async stores(options = {}) {
3336
+ return this.client._post("/api/v1/microcenter/stores", options);
3337
+ }
3338
+ };
3339
+
3340
+ // src/namespaces/walgreens.ts
3341
+ var WalgreensNamespace = class {
3342
+ constructor(client) {
3343
+ this.client = client;
3344
+ }
3345
+ client;
3346
+ /**
3347
+ * Search Walgreens retail products, up to 70 per page: product id, SKU, UPC,
3348
+ * name, brand, size, regular and sale price, unit price, promotion, coupon,
3349
+ * loyalty and rebate messages, rating, review count, image, URL,
3350
+ * ship/pickup/delivery availability, online stock status and clearance flag.
3351
+ * Prices are national. Pass store_id for that store's availability text.
3352
+ *
3353
+ * Costs 2 credits.
3354
+ */
3355
+ async search(options) {
3356
+ return this.client._post("/api/v1/walgreens/search", options);
3357
+ }
3358
+ /**
3359
+ * One Walgreens retail product by id or URL: SKU, UPC, GTIN, brand, size,
3360
+ * regular and sale price, savings, unit price, rewards and rebate offers,
3361
+ * description, ingredients, warnings, rating, review count, category path,
3362
+ * images, ship and pickup availability and clearance flag. Prices are
3363
+ * national. An unknown id is a 404.
3364
+ *
3365
+ * Costs 2 credits.
3366
+ */
3367
+ async product(options) {
3368
+ return this.client._post("/api/v1/walgreens/product", options);
3369
+ }
3370
+ /**
3371
+ * Walgreens and Duane Reade stores near a US ZIP or coordinates, nearest
3372
+ * first: store_number, name, brand, address, phone, coordinates, distance in
3373
+ * miles, opening and closing time, time zone and store page URL. Paged with
3374
+ * total_results, total_pages and has_more.
3375
+ *
3376
+ * Costs 2 credits.
3377
+ */
3378
+ async stores(options) {
3379
+ return this.client._post("/api/v1/walgreens/stores", options);
3380
+ }
3381
+ /**
3382
+ * Live in-store stock of one product at up to 20 stores: per store the
3383
+ * status (In Stock, Out of Stock, or Not Available when the store does not
3384
+ * carry it), the unit count and in_stock. Store numbers Walgreens does not
3385
+ * recognise are listed in unknown_store_ids. An unknown product is a 404.
3386
+ *
3387
+ * Costs 4 credits.
3388
+ */
3389
+ async stock(options) {
3390
+ return this.client._post("/api/v1/walgreens/stock", options);
3391
+ }
3392
+ };
3393
+
3394
+ // src/namespaces/cvs.ts
3395
+ var CVS_PRODUCT_TIMEOUT = 12e4;
3396
+ var CvsNamespace = class {
3397
+ constructor(client) {
3398
+ this.client = client;
3399
+ }
3400
+ client;
3401
+ /**
3402
+ * Search CVS front-store products: product_id and sku_id, name, brand, URL,
3403
+ * regular and sale price, unit price, promotion text, rating, review count,
3404
+ * size, image, coupons (ExtraBucks rewards and manufacturer coupons) and
3405
+ * stock at one store (in store, pickup) plus online ship stock;
3406
+ * same_day_delivery is always null. Sponsored placements are excluded. Includes brand,
3407
+ * price-range and rating facets.
3408
+ *
3409
+ * Costs 1 credit.
3410
+ */
3411
+ async search(options) {
3412
+ return this.client._post("/api/v1/cvs/search", options);
3413
+ }
3414
+ /**
3415
+ * One CVS product by URL or id: regular and sale price, unit price,
3416
+ * promotion and its end date, rating, review count, UPC, size, description,
3417
+ * highlights, ingredients, directions, warnings, attributes, breadcrumbs,
3418
+ * images and every variant (SKU id, UPC, size, price, rating). An unknown
3419
+ * product is a 404. Can take 10-30+ seconds.
3420
+ *
3421
+ * Costs 1 credit.
3422
+ */
3423
+ async product(options) {
3424
+ return this.client._post("/api/v1/cvs/product", options, void 0, CVS_PRODUCT_TIMEOUT);
3425
+ }
3426
+ /**
3427
+ * Units available at one CVS store for up to 20 SKUs: in_store (on the
3428
+ * shelf), pickup and ship (online stock, chain-wide). same_day_delivery is
3429
+ * always null (CVS does not report it per store). An unknown SKU or store
3430
+ * number reads as 0.
3431
+ *
3432
+ * Costs 1 credit.
3433
+ */
3434
+ async stock(options) {
3435
+ return this.client._post("/api/v1/cvs/stock", options);
3436
+ }
3437
+ };
3438
+
3151
3439
  // src/namespaces/trustpilot.ts
3152
3440
  var TrustpilotNamespace = class {
3153
3441
  constructor(client) {
@@ -3667,6 +3955,12 @@ var Scavio = class extends ScavioCore {
3667
3955
  samsClub;
3668
3956
  canadianTire;
3669
3957
  dollarGeneral;
3958
+ sephora;
3959
+ ulta;
3960
+ aldi;
3961
+ microCenter;
3962
+ walgreens;
3963
+ cvs;
3670
3964
  trustpilot;
3671
3965
  chatgpt;
3672
3966
  gemini;
@@ -3734,6 +4028,12 @@ var Scavio = class extends ScavioCore {
3734
4028
  this.samsClub = new SamsClubNamespace(this);
3735
4029
  this.canadianTire = new CanadianTireNamespace(this);
3736
4030
  this.dollarGeneral = new DollarGeneralNamespace(this);
4031
+ this.sephora = new SephoraNamespace(this);
4032
+ this.ulta = new UltaNamespace(this);
4033
+ this.aldi = new AldiNamespace(this);
4034
+ this.microCenter = new MicroCenterNamespace(this);
4035
+ this.walgreens = new WalgreensNamespace(this);
4036
+ this.cvs = new CvsNamespace(this);
3737
4037
  this.trustpilot = new TrustpilotNamespace(this);
3738
4038
  this.chatgpt = new ChatgptNamespace(this);
3739
4039
  this.gemini = new GeminiNamespace(this);
@@ -3845,15 +4145,18 @@ async function getSubtle() {
3845
4145
  0 && (module.exports = {
3846
4146
  AI_PROMPT_TIMEOUT,
3847
4147
  AirbnbNamespace,
4148
+ AldiNamespace,
3848
4149
  AmazonNamespace,
3849
4150
  AppStoreNamespace,
3850
4151
  BadRequestError,
3851
4152
  BookingNamespace,
4153
+ CVS_PRODUCT_TIMEOUT,
3852
4154
  CanadianTireNamespace,
3853
4155
  CapterraNamespace,
3854
4156
  ChatgptNamespace,
3855
4157
  CompaniesHouseNamespace,
3856
4158
  CostcoNamespace,
4159
+ CvsNamespace,
3857
4160
  DEFAULT_MAX_REQUESTS_PER_SECOND,
3858
4161
  DollarGeneralNamespace,
3859
4162
  EbayNamespace,
@@ -3877,6 +4180,7 @@ async function getSubtle() {
3877
4180
  MAX_REQUESTS_PER_SECOND,
3878
4181
  MercadoLibreNamespace,
3879
4182
  MetaAdsNamespace,
4183
+ MicroCenterNamespace,
3880
4184
  MissingAPIKeyError,
3881
4185
  NotFoundError,
3882
4186
  RateLimitError,
@@ -3892,12 +4196,15 @@ async function getSubtle() {
3892
4196
  ScavioError,
3893
4197
  ScavioJobTimeoutError,
3894
4198
  ScavioTimeoutError,
4199
+ SephoraNamespace,
3895
4200
  TargetNamespace,
3896
4201
  ThreadsNamespace,
3897
4202
  TikTokNamespace,
3898
4203
  TikTokShopNamespace,
3899
4204
  TripadvisorNamespace,
3900
4205
  TrustpilotNamespace,
4206
+ UltaNamespace,
4207
+ WalgreensNamespace,
3901
4208
  WalmartNamespace,
3902
4209
  XNamespace,
3903
4210
  YelpNamespace,