PageSourceSearch

https://virtustant-8e4eab.webflow.io/pricing

html virtustant-8e4eab.webflow.io collected 2026-10-03 13:59:32 UTC 154,952 bytes, 3,765 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Fri Oct 02 2026 20:22:08 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="virtustant-8e4eab.webflow.io" data-wf-page="66f0f6032f9297b2bd2036ba" data-wf-site="66e37e1f7b0b7a08bf707deb" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Virtustant Pricing for Employers: $7/hr All-In, $0 Fees</title><meta content="See Virtustant starting prices by role: VAs from $7/hr, SDRs from $8/hr, and executive assistants from $8.50/hr all-in. Zero recruitment fees." name="description"/><meta content="Virtustant Pricing for Employers: $7/hr All-In, $0 Fees" property="og:title"/><meta content="See Virtustant starting prices by role: VAs from $7/hr, SDRs from $8/hr, and executive assistants from $8.50/hr all-in. Zero recruitment fees." property="og:description"/><meta content="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/68b1f93a50c480bd59544dc4_opengraph-pricing-image.webp" property="og:image"/><meta content="Virtustant Pricing for Employers: $7/hr All-In, $0 Fees" name="twitter:title"/><meta content="See Virtustant starting prices by role: VAs from $7/hr, SDRs from $8/hr, and executive assistants from $8.50/hr all-in. Zero recruitment fees." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="X_tW25K0yiboOJPOHMgDsP1YYWh0s9M-keBTD7Ac7Mk" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/css/virtustant-8e4eab.webflow.shared.53b877ae3.min.css" rel="stylesheet" type="text/css" integrity="sha384-U7h3rj2sInn8R67jYMlNY8LhSsh5NDrKtu/+jt4pxOWs/BfpdHHoCmjuY9YtDJF7" crossorigin="anonymous"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/>
1<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
1<script type="text/javascript">WebFont.load({  google: {    families: ["Montserrat:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic","Open Sans:300,300italic,400,400italic,600,600italic,700,700italic,800,800italic","Ubuntu:300,300italic,400,400italic,500,500italic,700,700italic"]  }});</script>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/66ed9c3c9352e67b5c05772a_32x32.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/66fecfd9dda6ca6d78d7cddb_256x256.png" rel="apple-touch-icon"/><link href="https://www.virtustant.com/pricing" rel="canonical"/>
1<script type="application/ld+json">
2{
3  "@context": "https://schema.org",
4  "@graph": [
5    {
6      "@type": "WebPage",
7      "@id": "https://www.virtustant.com/pricing#webpage",
8      "name": "Virtustant Pricing for Employers: All-In Rates by Role",
9      "description": "Virtustant rates start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. Your quote depends on the role, experience and agreed schedule. Median client-side rates by role from Virtustant's H1 2026 placement data (441 starts, January–June 2026) are published on this page.",
10      "url": "https://www.virtustant.com/pricing",
11      "inLanguage": "en",
12      "dateModified": "2026-10-01",
13      "reviewedBy": {
14        "@id": "https://www.virtustant.com/about-us#kevin-wright"
15      },
16      "about": {
17        "@id": "https://www.virtustant.com/#organization"
18      },
19      "isPartOf": {
20        "@id": "https://www.virtustant.com/#website"
21      },
22      "speakable": {
23        "@type": "SpeakableSpecification",
24        "cssSelector": [
25          "h1",
26          ".vfaq-sec .fq-q",
27          ".vfaq-sec .fq-a p",
28          ".vpr-box p",
29          ".vpr-med p"
30        ]
31      },
32      "mainEntity": {
33        "@type": "Service",
34        "@id": "https://www.virtustant.com/pricing#service",
35        "name": "LATAM Remote Staffing",
36        "serviceType": "Remote staffing",
37        "provider": {
38          "@id": "https://www.virtustant.com/#organization"
39        },
40        "areaServed": {
41          "@type": "Country",
42          "name": "United States"
43        },
44        "offers": {
45          "@type": "Offer",
46          "description": "One all-in hourly rate with zero placement fees",
47          "price": "7.00",
48          "priceCurrency": "USD",
49          "priceSpecification": {
50            "@type": "UnitPriceSpecification",
51            "price": 7,
52            "minPrice": 7,
53            "priceCurrency": "USD",
54            "unitText": "HOUR",
55            "description": "Virtustant rates start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. Your quote depends on the role, experience and agreed schedule."
56          }
57        }
58      },
59      "hasPart": {
60        "@id": "https://www.virtustant.com/pricing#h1-2026-median-rates"
61      }
62    },
63    {
64      "@type": "Dataset",
65      "@id": "https://www.virtustant.com/pricing#h1-2026-median-rates",
66      "name": "Virtustant median client-side rates by role, H1 2026",
67      "description": "Median client-side hourly rate benchmarks by role from Virtustant placement records: 441 placement starts (397 people) between January 1 and June 30, 2026, records read on September 30, 2026. Each rate is expected weekly client revenue divided by expected weekly hours (SDR/BDR: explicit client rate). Benchmarks from placement records, not verified payments. There is no single median across all roles;
67 role medians range from $9.00/hr (dispatcher) to $12.41/hr (SDR/BDR).",
68      "url": "https://www.virtustant.com/pricing#median-rates",
69      "temporalCoverage": "2026-01-01/2026-06-30",
70      "dateModified": "2026-10-01",
71      "measurementTechnique": "Median per role of expected weekly client revenue divided by expected weekly hours for each placement start (SDR/BDR: explicit client hourly rate); roles with fewer than 10 starts flagged as small sample.",
72      "variableMeasured": [
73        {
74          "@type": "PropertyValue",
75          "name": "Median client-side hourly rate: SDR / BDR",
76          "value": 12.41,
77          "unitText": "USD per hour",
78          "description": "n=32 placement starts"
79        },
80        {
81          "@type": "PropertyValue",
82          "name": "Median client-side hourly rate: Social media manager",
83          "value": 12,
84          "unitText": "USD per hour",
85          "description": "n=31 placement starts"
86        },
87        {
88          "@type": "PropertyValue",
89          "name": "Median client-side hourly rate: Executive assistant",
90          "value": 12,
91          "unitText": "USD per hour",
92          "description": "n=24 placement starts"
93        },
94        {
95          "@type": "PropertyValue",
96          "name": "Median client-side hourly rate: Virtual assistant",
97          "value": 10.1,
98          "unitText": "USD per hour",
99          "description": "n=24 placement starts"
100        },
101        {
102          "@type": "PropertyValue",
103          "name": "Median client-side hourly rate: Appointment setter",
104          "value": 10.73,
105          "unitText": "USD per hour",
106          "description": "n=22 placement starts"
107        },
108        {
109          "@type": "PropertyValue",
110          "name": "Median client-side hourly rate: Administrative assistant",
111          "value": 9.5,
112          "unitText": "USD per hour",
113          "description": "n=17 placement starts"
114        },
115        {
116          "@type": "PropertyValue",
117          "name": "Median client-side hourly rate: Customer service",
118          "value": 10.83,
119          "unitText": "USD per hour",
120          "description": "n=12 placement starts"
121        },
122        {
123          "@type": "PropertyValue",
124          "name": "Median client-side hourly rate: Dispatcher",
125          "value": 9,
126          "unitText": "USD per hour",
127          "description": "n=10 placement starts"
128        },
129        {
130          "@type": "PropertyValue",
131          "name": "Median client-side hourly rate: Customer service representative",
132          "value": 9.65,
133          "unitText": "USD per hour",
134          "description": "n=9 placement starts (small sample)"
135        },
136        {
137          "@type": "PropertyValue",
138          "name": "Median client-side hourly rate: Bookkeeper",
139          "value": 12.85,
140          "unitText": "USD per hour",
141          "description": "n=7 placement starts (small sample)"
142        }
143      ],
144      "creator": {
145        "@id": "https://www.virtustant.com/#organization"
146      },
147      "publisher": {
148        "@id": "https://www.virtustant.com/#organization"
149      },
150      "isBasedOn": "https://www.virtustant.com/blog/2026-nearshore-rate-report",
151      "isAccessibleForFree": true,
152      "inLanguage": "en"
153    },
154    {
155      "@type": "FAQPage",
156      "@id": "https://www.virtustant.com/pricing#faq",
157      "isPartOf": {
158        "@id": "https://www.virtustant.com/pricing#webpage"
159      },
160      "mainEntity": [
161        {
162          "@type": "Question",
163          "name": "How much does it cost to hire a virtual assistant from Latin America through Virtustant?",
164          "acceptedAnswer": {
165            "@type": "Answer",
166            "text": "Virtual assistants start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. At the starting price, 160 billed hours equals $1,120. In Virtustant's H1 2026 placement data (441 starts, January–June 2026), the median client-side rate for a virtual assistant was $10.10/hr (n=24), or $1,616 for 160 hours. Your quote depends on the role, experience and agreed schedule."
167          }
168        },
169        {
170          "@type": "Question",
171          "name": "How much does Virtustant charge for recruitment services?",
172          "acceptedAnswer": {
173            "@type": "Answer",
174            "text": "There is no recruitment or placement fee. Virtustant rates start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. Your quote depends on the role, experience and agreed schedule."
175          }
176        },
177        {
178          "@type": "Question",
179          "name": "How much does a virtual executive assistant cost through Virtustant?",
180          "acceptedAnswer": {
181            "@type": "Answer",
182            "text": "Executive assistants start at $8.50/hr all-in. At that starting price, 160 billed hours equals $1,360. In Virtustant's H1 2026 placement data, the median client-side rate for an executive assistant was $12.00/hr (n=24). Your quote depends on the role, experience and agreed schedule, with no separate recruitment or placement fee."
183          }
184        },
185        {
186          "@type": "Question",
187          "name": "Is a part-time hire more expensive per hour?",
188          "acceptedAnswer": {
189            "@type": "Answer",
190            "text": "Part-time and full-time hiring use the same all-in hourly pricing model. The quoted rate depends on the role, experience and agreed schedule. We confirm the rate and hours during your discovery call."
191          }
192        },
193        {
194          "@type": "Question",
195          "name": "How much do staffing agencies charge, and how is Virtustant different?",
196          "acceptedAnswer": {
197            "@type": "Answer",
198            "text": "Agency pricing varies: some charge a placement fee or a percentage of annual compensation. Virtustant charges one quoted all-in hourly rate, with no separate recruitment or placement fee. Compare the same role, schedule, service scope and contract terms."
199          }
200        },
201        {
202          "@type": "Question",
203          "name": "How long is Virtustant's hiring process?",
204          "acceptedAnswer": {
205            "@type": "Answer",
206            "text": "You get a shortlist of 3 to 5 vetted candidates within 48 hours of your first call, and your hire can start in 72 hours."
207          }
208        },
209        {
210          "@type": "Question",
211          "name": "Do you provide ongoing support after the hiring process?",
212          "acceptedAnswer": {
213            "@type": "Answer",
214            "text": "Yes. Each hire gets a dedicated account manager who oversees the transition, runs regular check-ins, and ensures quality. We also handle all payroll, HR and compliance for the lifetime of the engagement."
215          }
216        },
217        {
218          "@type": "Question",
219          "name": "What's Virtustant's cancellation policy?",
220          "acceptedAnswer": {
221            "@type": "Answer",
222            "text": "Engagements are month-to-month. Cancellation and changes to your engagement follow the terms in your agreement. We confirm the schedule and engagement terms with you during the discovery call."
223          }
224        },
225        {
226          "@type": "Question",
227          "name": "What kind of services do you offer?",
228          "acceptedAnswer": {
229            "@type": "Answer",
230            "text": "Remote staffing across roles such as virtual assistants, executive assistants, sales reps, marketing specialists, customer service, bookkeepers, designers, developers and project managers, all pre-vetted, bilingual and working in your time zone."
231          }
232        },
233        {
234          "@type": "Question",
235          "name": "How can I book a free consultation with Virtustant?",
236          "acceptedAnswer": {
237            "@type": "Answer",
238            "text": "Use the form on the page or click the Book a call button anywhere on the site. The call is 30 minutes, free, with zero obligation."
239          }
240        }
241      ]
242    },
243    {
244      "@type": "BreadcrumbList",
245      "@id": "https://www.virtustant.com/pricing#breadcrumb",
246      "itemListElement": [
247        {
248          "@type": "ListItem",
249          "position": 1,
250          "name": "Home",
251          "item": "https://www.virtustant.com/"
252        },
253        {
254          "@type": "ListItem",
255          "position": 2,
256          "name": "Pricing",
257          "item": "https://www.virtustant.com/pricing"
258        }
259      ]
260    }
261  ]
262}
263</script>
263<script>(function(w,i,g){w[g]=w[g]||[];if(typeof w[g].push=='function')w[g].push.apply(w[g],Array.isArray(i)?i:[i]);})(window,['GTM-TM59XZLC'],'google_tags_first_party');</script>
263<script async="" src="/xa5e8du3i6ydNjZlMzdlMWY3YjBiN2EwOGJmNzA3ZGVi/PtOkhLp-YGMGuzduhxCgtPzVuXY"></script>
263<script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('set', 'developer_id.dZGVlNj', true);gtag('set', 'developer_id.dYWYxNW', true);gtag('js', new Date());gtag('config', 'GTM-TM59XZLC');</script>
vendor: 86 bytes, line 263
263<script src="https://www.google.com/recaptcha/api.js" type="text/javascript"></script>
263<script type="text/javascript">!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.agent='plwebflow';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '149301424004448');fbq('track', 'PageView');</script>
263<!-- ===================================================================== -->
264<!-- VIRTUSTANT HEAD CODE  (Project Settings > Custom Code > Head Code)      -->
265<!-- ===================================================================== -->
266<!-- NOTE: do not re-paste the vendor's stray title element here - it created a duplicate page title sitewide. -->
267<script type="text/javascript" src="https://qscripts.s3.amazonaws.com/pscript.js"></script>
vendor: 1 bytes, line 267
267
268<script>
269qbit('event', 'site_visit', {
270  agid: '1480',
271  adid: '20035068',
272  referrer: document.referrer,
273  site_url: window.location.href,
274  timestamp: Date.now()
275});
276</script>
276
277
278<meta property="og:site_name" content="Virtustant" />
279<meta name="linkedin-site-verification" content="16492df8-b529-4f29-b3fe-f30d90f59228" />
280<link rel="preconnect" href="https://assets.calendly.com" crossorigin />
281
282<script>
283(function () {
284
285  var vtMemory = {};
286  var vtStorage = {
287    getItem: function (key) { try { return window.localStorage.getItem(key) || vtMemory[key] || null; } catch (e) { return vtMemory[key] || null; } },
288    setItem: function (key, value) { vtMemory[key] = String(value); try { window.localStorage.setItem(key, String(value)); } catch (e) {} },
289    removeItem: function (key) { delete vtMemory[key]; try { window.localStorage.removeItem(key); } catch (e) {} }
290  };
291
292  /* ─── CONFIG ──────────────────────────────────────────────────────── */
293
294  var WEBHOOK_URL = 'https://hook.us1.make.com/9fe9yonsopmuqfef4ezcc5lbdq81nxyb';
295
296  var CAL_URL =
297    'https://calendly.com/d/cm4v-bxb-7hy/discovery-call-virtustant';
298
299  var CONTACTED_URL = '/confirmation';
300
301  var MAX_RETRIES = 3;
302
303  var TTL_MS =
304    30 * 24 * 60 * 60 * 1000;
305
306  // 7-day ad-credit window for Calendly.
307  var CAL_TTL_MS =
308    7 * 24 * 60 * 60 * 1000;
309
310  var CALENDLY_FIELDS = [
311    'utm_source',
312    'utm_medium',
313    'utm_campaign',
314    'utm_term',
315    'utm_content'
316  ];
317
318  var CLICK_IDS = [
319    'gclid',
320    'gbraid',
321    'wbraid',
322    'gad_source',
323    'gad_campaignid',
324    'fbclid',
325    'ttclid',
326    'msclkid',
327    'li_fat_id'
328  ];
329
330  var SOURCE_BY_CLICKID = {
331    gclid: 'google',
332    gbraid: 'google',
333    wbraid: 'google',
334    gad_source: 'google',
335    gad_campaignid: 'google',
336    fbclid: 'facebook',
337    ttclid: 'tiktok',
338    msclkid: 'bing',
339    li_fat_id: 'linkedin'
340  };
341
342
343  /* ─── AI SOURCE NORMALIZATION ─────────────────────────────────────── */
344
345  // Different AI platforms / integrations can sometimes use slightly
346  // different utm_source values.
347  //
348  // Normalize them here so analytics stays consistent.
349
350  var AI_SOURCE_ALIASES = {
351
352    // ChatGPT / OpenAI
353    'chatgpt': 'chatgpt',
354    'chatgpt.com': 'chatgpt',
355    'chat.openai.com': 'chatgpt',
356    'openai': 'chatgpt',
357    'openai.com': 'chatgpt',
358
359    // Gemini
360    'gemini': 'gemini',
361    'gemini.google.com': 'gemini',
362    'bard': 'gemini',
363    'bard.google.com': 'gemini',
364
365    // Claude
366    'claude': 'claude',
367    'claude.ai': 'claude',
368    'anthropic': 'claude',
369
370    // Perplexity
371    'perplexity': 'perplexity',
372    'perplexity.ai': 'perplexity',
373
374    // Microsoft Copilot
375    'copilot': 'copilot',
376    'microsoft_copilot': 'copilot',
377    'copilot.microsoft.com': 'copilot',
378
379    // Grok
380    'grok': 'grok',
381    'xai': 'grok',
382    'x.ai': 'grok',
383
384    // Other assistants
385    'deepseek': 'deepseek',
386    'deepseek.com': 'deepseek',
387
388    'you.com': 'you_com',
389    'you_com': 'you_com',
390
391    'poe': 'poe',
392    'poe.com': 'poe',
393
394    'meta_ai': 'meta_ai',
395    'meta.ai': 'meta_ai',
396
397    'character_ai': 'character_ai',
398    'character.ai': 'character_ai',
399
400    // Search-engine AI experiences
401    'google_ai_mode': 'google_ai_mode',
402    'brave_ai': 'brave_ai'
403  };
404
405
406  function vtNormalizeAiSource(source) {
407
408    if (!source) return '';
409
410    var normalized =
411      String(source)
412        .toLowerCase()
413        .trim();
414
415    return AI_SOURCE_ALIASES[normalized] || source;
416  }
417
418
419  function vtIsAiSource(source) {
420
421    return [
422      'chatgpt',
423      'gemini',
424      'claude',
425      'perplexity',
426      'copilot',
427      'grok',
428      'deepseek',
429      'you_com',
430      'meta_ai',
431      'poe',
432      'character_ai',
433      'google_ai_mode',
434      'brave_ai'
435    ].indexOf(source) !== -1;
436  }
437
438
439  /* ─── HOSTNAME FALLBACK MAP ──────────────────────────────────────── */
440
441  // Used only AFTER explicit UTMs, click IDs and AI-specific URL
442  // detection have failed.
443
444  var SOURCE_BY_HOSTNAME = [
445
446    /* Search engines */
447
448    {
449      re: /(^|\.)google\./i,
450      source: 'google_organic',
451      medium: 'organic'
452    },
453
454    {
455      re: /(^|\.)bing\.com$/i,
456      source: 'bing_organic',
457      medium: 'organic'
458    },
459
460    {
461      re: /(^|\.)yahoo\./i,
462      source: 'yahoo_organic',
463      medium: 'organic'
464    },
465
466    {
467      re: /(^|\.)duckduckgo\.com$/i,
468      source: 'duckduckgo_organic',
469      medium: 'organic'
470    },
471
472    {
473      re: /(^|\.)yandex\./i,
474      source: 'yandex_organic',
475      medium: 'organic'
476    },
477
478    {
479      re: /(^|\.)baidu\.com$/i,
480      source: 'baidu_organic',
481      medium: 'organic'
482    },
483
484
485    /* Social */
486
487    {
488      re: /(^|\.)facebook\.com$/i,
489      source: 'facebook_organic',
490      medium: 'referral'
491    },
492
493    {
494      re: /(^|\.)linkedin\.com$/i,
495      source: 'linkedin_organic',
496      medium: 'referral'
497    },
498
499    {
500      re: /(^|\.)(twitter\.com|x\.com)$/i,
501      source: 'twitter_organic',
502      medium: 'referral'
503    },
504
505    {
506      re: /(^|\.)instagram\.com$/i,
507      source: 'instagram_organic',
508      medium: 'referral'
509    },
510
511    {
512      re: /(^|\.)youtube\.com$/i,
513      source: 'youtube_organic',
514      medium: 'referral'
515    },
516
517    {
518      re: /(^|\.)reddit\.com$/i,
519      source: 'reddit_organic',
520      medium: 'referral'
521    },
522
523
524    /* AI assistants */
525
526    {
527      re: /(^|\.)chatgpt\.com$/i,
528      source: 'chatgpt',
529      medium: 'ai_assistant'
530    },
531
532    {
533      re: /(^|\.)chat\.openai\.com$/i,
534      source: 'chatgpt',
535      medium: 'ai_assistant'
536    },
537
538    {
539      re: /(^|\.)claude\.ai$/i,
540      source: 'claude',
541      medium: 'ai_assistant'
542    },
543
544    {
545      re: /(^|\.)perplexity\.ai$/i,
546      source: 'perplexity',
547      medium: 'ai_assistant'
548    },
549
550    {
551      re: /(^|\.)gemini\.google\.com$/i,
552      source: 'gemini',
553      medium: 'ai_assistant'
554    },
555
556    {
557      re: /(^|\.)bard\.google\.com$/i,
558      source: 'gemini',
559      medium: 'ai_assistant'
560    },
561
562    {
563      re: /(^|\.)copilot\.microsoft\.com$/i,
564      source: 'copilot',
565      medium: 'ai_assistant'
566    },
567
568    {
569      re: /(^|\.)edgeservices\.bing\.com$/i,
570      source: 'copilot',
571      medium: 'ai_assistant'
572    },
573
574    {
575      re: /(^|\.)deepseek\.com$/i,
576      source: 'deepseek',
577      medium: 'ai_assistant'
578    },
579
580    {
581      re: /(^|\.)(grok\.com|x\.ai)$/i,
582      source: 'grok',
583      medium: 'ai_assistant'
584    },
585
586    {
587      re: /(^|\.)you\.com$/i,
588      source: 'you_com',
589      medium: 'ai_assistant'
590    },
591
592    {
593      re: /(^|\.)meta\.ai$/i,
594      source: 'meta_ai',
595      medium: 'ai_assistant'
596    },
597
598    {
599      re: /(^|\.)poe\.com$/i,
600      source: 'poe',
601      medium: 'ai_assistant'
602    },
603
604    {
605      re: /(^|\.)character\.ai$/i,
606      source: 'character_ai',
607      medium: 'ai_assistant'
608    }
609  ];
610
611
612  /* ─── LOCAL STORAGE TRACKING ─────────────────────────────────────── */
613
614
615  function vtSetTracked(key, value) {
616
617    vtStorage.setItem(
618      'vt_' + key,
619      value
620    );
621
622    vtStorage.setItem(
623      'vt_' + key + '_ts',
624      String(Date.now())
625    );
626  }
627
628
629  // Returns stored value only while inside attribution TTL.
630  function vtGetTracked(key) {
631
632    var val =
633      vtStorage.getItem(
634        'vt_' + key
635      );
636
637    var ts =
638      vtStorage.getItem(
639        'vt_' + key + '_ts'
640      );
641
642    if (
643      !val ||
644      !ts ||
645      Date.now() - Number(ts) > TTL_MS
646    ) {
647
648      vtStorage.removeItem(
649        'vt_' + key
650      );
651
652      vtStorage.removeItem(
653        'vt_' + key + '_ts'
654      );
655
656      return '';
657    }
658
659    return val;
660  }
661
662
663  // Non-destructive read using a custom TTL.
664  function vtRecentTracked(key, ttl) {
665
666    var val =
667      vtStorage.getItem(
668        'vt_' + key
669      );
670
671    var ts =
672      vtStorage.getItem(
673        'vt_' + key + '_ts'
674      );
675
676    if (
677      !val ||
678      !ts ||
679      Date.now() - Number(ts) > ttl
680    ) {
681      return '';
682    }
683
684    return val;
685  }
686
687
688  /* ─── READ URL TRACKING PARAMETERS ───────────────────────────────── */
689
690
691  var urlParams =
692    new URLSearchParams(
693      window.location.search
694    );
695
696  var ALL_KEYS =
697    CALENDLY_FIELDS.concat(
698      CLICK_IDS
699    );
700
701  var tracking = {};
702
703
704  ALL_KEYS.forEach(function (key) {
705
706    tracking[key] =
707      urlParams.get(key) || '';
708
709  });
710
711
712  // Persist explicit UTMs and click IDs.
713  ALL_KEYS.forEach(function (key) {
714
715    if (tracking[key]) {
716
717      vtSetTracked(
718        key,
719        tracking[key]
720      );
721
722    } else {
723
724      tracking[key] =
725        vtGetTracked(key);
726
727    }
728
729  });
730
731
732  /* ─── REFERRER / AI DETECTION ────────────────────────────────────── */
733
734  function vtDetectReferrerSource() {
735
736    try {
737
738      if (!document.referrer) {
739        return null;
740      }
741
742
743      var ref =
744        new URL(
745          document.referrer
746        );
747
748
749      var refHost =
750        ref.hostname
751          .toLowerCase()
752          .replace(/^www\./, '');
753
754
755      var currentHost =
756        window.location.hostname
757          .toLowerCase()
758          .replace(/^www\./, '');
759
760
761      var refPath =
762        ref.pathname
763          .toLowerCase();
764
765
766      if (
767        refHost === currentHost
768      ) {
769        return null;
770      }
771
772
773      /* ─────────────────────────────────────────────────────────────
774         AI-SPECIFIC DETECTION
775
776         IMPORTANT:
777         These checks must happen BEFORE generic Google / Bing
778         organic detection.
779         ───────────────────────────────────────────────────────────── */
780
781
782      /* ChatGPT */
783
784      if (
785        /(^|\.)chatgpt\.com$/i.test(refHost) ||
786        /(^|\.)chat\.openai\.com$/i.test(refHost)
787      ) {
788
789        return {
790          source: 'chatgpt',
791          medium: 'ai_assistant'
792        };
793
794      }
795
796
797      /* Gemini */
798
799      if (
800        /(^|\.)gemini\.google\.com$/i.test(refHost) ||
801        /(^|\.)bard\.google\.com$/i.test(refHost)
802      ) {
803
804        return {
805          source: 'gemini',
806          medium: 'ai_assistant'
807        };
808
809      }
810
811
812      /* Claude */
813
814      if (
815        /(^|\.)claude\.ai$/i.test(refHost)
816      ) {
817
818        return {
819          source: 'claude',
820          medium: 'ai_assistant'
821        };
822
823      }
824
825
826      /* Perplexity */
827
828      if (
829        /(^|\.)perplexity\.ai$/i.test(refHost)
830      ) {
831
832        return {
833          source: 'perplexity',
834          medium: 'ai_assistant'
835        };
836
837      }
838
839
840      /* Microsoft Copilot standalone */
841
842      if (
843        /(^|\.)copilot\.microsoft\.com$/i.test(refHost)
844      ) {
845
846        return {
847          source: 'copilot',
848          medium: 'ai_assistant'
849        };
850
851      }
852
853
854      /* Bing Copilot / Bing AI search
855
856         This is the important improvement over the old script.
857
858         Previously only the hostname was inspected, meaning:
859
860         bing.com/copilotsearch
861
862         became:
863
864         bing_organic
865
866         because both share bing.com.
867      */
868
869      if (
870        /(^|\.)bing\.com$/i.test(refHost) &&
871        (
872          /^\/copilotsearch(?:\/|$)/i.test(refPath) ||
873          /^\/copilot(?:\/|$)/i.test(refPath) ||
874          /^\/chat(?:\/|$)/i.test(refPath)
875        )
876      ) {
877
878        return {
879          source: 'copilot',
880          medium: 'ai_assistant'
881        };
882
883      }
884
885
886      /* Edge / Microsoft AI services */
887
888      if (
889        /(^|\.)edgeservices\.bing\.com$/i.test(refHost)
890      ) {
891
892        return {
893          source: 'copilot',
894          medium: 'ai_assistant'
895        };
896
897      }
898
899
900      /* ─────────────────────────────────────────────────────────────
901         GOOGLE AI MODE
902
903         udm=50 is associated with Google's AI Mode.
904
905         IMPORTANT:
906         This is NOT necessarily Gemini.
907
908         So we track it separately as:
909
910         google_ai_mode / ai_assistant
911         ───────────────────────────────────────────────────────────── */
912
913      if (
914        /(^|\.)google\./i.test(refHost) &&
915        (
916          ref.searchParams.get('udm') === '50' ||
917          refPath === '/ai' ||
918          refPath.indexOf('/ai/') === 0
919        )
920      ) {
921
922        return {
923          source: 'google_ai_mode',
924          medium: 'ai_assistant'
925        };
926
927      }
928
929
930      /* Grok */
931
932      if (
933        /(^|\.)(grok\.com|x\.ai)$/i.test(refHost)
934      ) {
935
936        return {
937          source: 'grok',
938          medium: 'ai_assistant'
939        };
940
941      }
942
943
944      /* DeepSeek */
945
946      if (
947        /(^|\.)deepseek\.com$/i.test(refHost)
948      ) {
949
950        return {
951          source: 'deepseek',
952          medium: 'ai_assistant'
953        };
954
955      }
956
957
958      /* You.com */
959
960      if (
961        /(^|\.)you\.com$/i.test(refHost)
962      ) {
963
964        return {
965          source: 'you_com',
966          medium: 'ai_assistant'
967        };
968
969      }
970
971
972      /* Meta AI */
973
974      if (
975        /(^|\.)meta\.ai$/i.test(refHost)
976      ) {
977
978        return {
979          source: 'meta_ai',
980          medium: 'ai_assistant'
981        };
982
983      }
984
985
986      /* Poe */
987
988      if (
989        /(^|\.)poe\.com$/i.test(refHost)
990      ) {
991
992        return {
993          source: 'poe',
994          medium: 'ai_assistant'
995        };
996
997      }
998
999
1000      /* Character AI */
1001
1002      if (
1003        /(^|\.)character\.ai$/i.test(refHost)
1004      ) {
1005
1006        return {
1007          source: 'character_ai',
1008          medium: 'ai_assistant'
1009        };
1010
1011      }
1012
1013
1014      /* Brave AI */
1015
1016      if (
1017        refHost === 'search.brave.com' &&
1018        /^\/ask(?:\/|$)/i.test(refPath)
1019      ) {
1020
1021        return {
1022          source: 'brave_ai',
1023          medium: 'ai_assistant'
1024        };
1025
1026      }
1027
1028
1029      /* ─────────────────────────────────────────────────────────────
1030         NORMAL HOSTNAME FALLBACK
1031
1032         Only gets here when an AI-specific URL was not detected.
1033         ───────────────────────────────────────────────────────────── */
1034
1035      for (
1036        var i = 0;
1037        i < SOURCE_BY_HOSTNAME.length;
1038        i++
1039      ) {
1040
1041        if (
1042          SOURCE_BY_HOSTNAME[i].re.test(
1043            refHost
1044          )
1045        ) {
1046
1047          return {
1048            source:
1049              SOURCE_BY_HOSTNAME[i].source,
1050
1051            medium:
1052              SOURCE_BY_HOSTNAME[i].medium
1053          };
1054
1055        }
1056
1057      }
1058
1059
1060      /* Unknown external referral */
1061
1062      return {
1063
1064        source:
1065          refHost.replace(
1066            /^www\./,
1067            ''
1068          ),
1069
1070        medium:
1071          'referral'
1072
1073      };
1074
1075
1076    } catch (e) {
1077
1078      return null;
1079
1080    }
1081
1082  }
1083
1084
1085  /* ─── CAPTURE REFERRER FALLBACK ──────────────────────────────────── */
1086
1087
1088  (function vtCaptureReferrerFallback() {
1089
1090    var hasExplicitParams =
1091      ALL_KEYS.some(function (k) {
1092
1093        return !!urlParams.get(k);
1094
1095      });
1096
1097
1098    // Explicit UTMs / click IDs always win.
1099    if (hasExplicitParams) {
1100      return;
1101    }
1102
1103
1104    var detected =
1105      vtDetectReferrerSource();
1106
1107
1108    if (detected) {
1109
1110      vtSetTracked(
1111        'ref_source',
1112        detected.source
1113      );
1114
1115      vtSetTracked(
1116        'ref_medium',
1117        detected.medium
1118      );
1119
1120    }
1121
1122  })();
1123
1124
1125  window.vtTracking =
1126    tracking;
1127
1128  window.vtCAL_URL =
1129    CAL_URL;
1130
1131
1132  /* ─── COOKIE HELPERS ─────────────────────────────────────────────── */
1133
1134
1135  function vtGetCookie(name) {
1136
1137    var match =
1138      document.cookie.match(
1139        new RegExp(
1140          '(?:^|; )' +
1141          name +
1142          '=([^;]*)'
1143        )
1144      );
1145
1146    return match
1147      ? decodeURIComponent(
1148          match[1]
1149        )
1150      : '';
1151
1152  }
1153
1154
1155  window.vtGetFbp = function () {
1156
1157    return vtGetCookie(
1158      '_fbp'
1159    );
1160
1161  };
1162
1163
1164  /* ─── META / FACEBOOK PARAMS ─────────────────────────────────────── */
1165
1166
1167  window.vtBuildFbParams =
1168    function () {
1169
1170      var out = {
1171        fbc: '',
1172        fbp: ''
1173      };
1174
1175
1176      if (tracking.fbclid) {
1177
1178        var ts =
1179          vtStorage.getItem(
1180            'vt_fbclid_ts'
1181          ) ||
1182          String(
1183            Date.now()
1184          );
1185
1186
1187        out.fbc =
1188          'fb.1.' +
1189          ts +
1190          '.' +
1191          tracking.fbclid;
1192
1193      }
1194
1195
1196      out.fbp =
1197        window.vtGetFbp();
1198
1199
1200      return out;
1201
1202    };
1203
1204
1205  /* ─── META LEAD TRACKING ─────────────────────────────────────────────── */
1206
1207
1208  window.vtTrackMetaLead =
1209    function () {
1210
1211      var storageKey =
1212        'vt_meta_lead_tracked';
1213
1214
1215      /*
1216       * Count a visitor as a Meta Lead only once per browser session.
1217       * This prevents a form submit followed by a Calendly open (or the
1218       * reverse) from creating two Lead events for the same session.
1219       */
1220
1221      try {
1222
1223        if (
1224          sessionStorage.getItem(
1225            storageKey
1226          ) === '1'
1227        ) {
1228          return false;
1229        }
1230
1231      } catch (e) {}
1232
1233
1234      if (
1235        typeof window.fbq ===
1236        'function'
1237      ) {
1238
1239        window.fbq(
1240          'track',
1241          'Lead'
1242        );
1243
1244
1245        try {
1246
1247          sessionStorage.setItem(
1248            storageKey,
1249            '1'
1250          );
1251
1252        } catch (e) {}
1253
1254
1255        return true;
1256
1257      }
1258
1259
1260      console.warn(
1261        '[vt] Meta Pixel not available for Lead event'
1262      );
1263
1264      return false;
1265
1266    };
1267
1268
1269  /* ─── ATTRIBUTION RESOLUTION ─────────────────────────────────────── */
1270
1271
1272  function vtResolveAttribution(trk) {
1273
1274    trk =
1275      trk ||
1276      tracking;
1277
1278
1279    var out = {
1280
1281      utm_source:
1282        trk.utm_source,
1283
1284      utm_medium:
1285        trk.utm_medium,
1286
1287      utm_campaign:
1288        trk.utm_campaign,
1289
1290      utm_term:
1291        trk.utm_term,
1292
1293      utm_content:
1294        trk.utm_content
1295
1296    };
1297
1298
1299    /* Normalize explicit AI UTM sources */
1300
1301    if (out.utm_source) {
1302
1303      out.utm_source =
1304        vtNormalizeAiSource(
1305          out.utm_source
1306        );
1307
1308
1309      if (
1310        vtIsAiSource(
1311          out.utm_source
1312        ) &&
1313        !out.utm_medium
1314      ) {
1315
1316        out.utm_medium =
1317          'ai_assistant';
1318
1319      }
1320
1321    }
1322
1323
1324    /* Detect source through advertising click IDs */
1325
1326    var blobParts = [];
1327
1328    var inferredSource = '';
1329
1330
1331    CLICK_IDS.forEach(
1332      function (k) {
1333
1334        if (trk[k]) {
1335
1336          blobParts.push(
1337            k +
1338            ':' +
1339            trk[k]
1340          );
1341
1342
1343          if (
1344            !inferredSource &&
1345            SOURCE_BY_CLICKID[k]
1346          ) {
1347
1348            inferredSource =
1349              SOURCE_BY_CLICKID[k];
1350
1351          }
1352
1353        }
1354
1355      }
1356    );
1357
1358
1359    var clickBlob =
1360      blobParts.join('|');
1361
1362
1363    if (
1364      !out.utm_source &&
1365      inferredSource
1366    ) {
1367
1368      out.utm_source =
1369        inferredSource;
1370
1371    }
1372
1373
1374    if (
1375      !out.utm_medium &&
1376      clickBlob
1377    ) {
1378
1379      out.utm_medium =
1380        'cpc';
1381
1382    }
1383
1384
1385    if (trk.fbclid) {
1386
1387  // For Meta/Facebook traffic, send only the raw fbclid
1388  // in utm_content so Calendly/webhooks can use it directly.
1389  out.utm_content = trk.fbclid;
1390
1391} else if (clickBlob) {
1392
1393  if (!out.utm_content) {
1394
1395    out.utm_content = clickBlob;
1396
1397  } else if (!out.utm_term) {
1398
1399    out.utm_term = clickBlob;
1400
1401  } else {
1402
1403    out.utm_content =
1404      out.utm_content +
1405      '|' +
1406      clickBlob;
1407
1408  }
1409
1410}
1411
1412
1413    /* Referrer fallback
1414
1415       Includes:
1416
1417       - AI assistants
1418       - Google AI Mode
1419       - Bing Copilot
1420       - organic search
1421       - organic social
1422       - referral websites
1423    */
1424
1425    if (
1426      !out.utm_source
1427    ) {
1428
1429      var refSource =
1430        vtGetTracked(
1431          'ref_source'
1432        );
1433
1434
1435      if (refSource) {
1436
1437        out.utm_source =
1438          vtNormalizeAiSource(
1439            refSource
1440          );
1441
1442
1443        if (
1444          !out.utm_medium
1445        ) {
1446
1447          out.utm_medium =
1448            vtGetTracked(
1449              'ref_medium'
1450            ) ||
1451            'referral';
1452
1453        }
1454
1455      }
1456
1457    }
1458
1459
1460    /* Final fallback */
1461
1462    if (
1463      !out.utm_source
1464    ) {
1465
1466      out.utm_source =
1467        'webpage';
1468
1469    }
1470
1471
1472    if (
1473      !out.utm_medium
1474    ) {
1475
1476      out.utm_medium =
1477        'direct';
1478
1479    }
1480
1481
1482    if (
1483      !out.utm_campaign
1484    ) {
1485
1486      out.utm_campaign =
1487        'none';
1488
1489    }
1490
1491
1492    if (
1493      !out.utm_term
1494    ) {
1495
1496      out.utm_term =
1497        'none';
1498
1499    }
1500
1501
1502    if (
1503      !out.utm_content
1504    ) {
1505
1506      out.utm_content =
1507        'none';
1508
1509    }
1510
1511
1512    return out;
1513
1514  }
1515
1516
1517  window.vtResolveAttribution =
1518    vtResolveAttribution;
1519
1520
1521  /* ─── CALENDLY URL ───────────────────────────────────────────────── */
1522
1523
1524  window.vtBuildCalendlyUrl =
1525    function (extraParams) {
1526
1527      var out =
1528        vtResolveAttribution();
1529
1530
1531      var p =
1532        new URLSearchParams();
1533
1534
1535      CALENDLY_FIELDS.forEach(
1536        function (k) {
1537
1538          p.set(
1539            k,
1540            out[k]
1541          );
1542
1543        }
1544      );
1545
1546
1547      if (extraParams) {
1548
1549        new URLSearchParams(
1550          extraParams
1551        ).forEach(
1552          function (v, k) {
1553
1554            p.set(
1555              k,
1556              v
1557            );
1558
1559          }
1560        );
1561
1562      }
1563
1564
1565      return (
1566        CAL_URL +
1567        '?' +
1568        p.toString()
1569      );
1570
1571    };
1572
1573
1574  /* ─── CALENDLY POPUP ATTRIBUTION ─────────────────────────────────── */
1575
1576
1577  window.vtBuildCalendlyPopupUrl =
1578    function () {
1579
1580      var recent = {};
1581
1582
1583      ALL_KEYS.forEach(
1584        function (k) {
1585
1586          recent[k] =
1587            vtRecentTracked(
1588              k,
1589              CAL_TTL_MS
1590            );
1591
1592        }
1593      );
1594
1595
1596      var out =
1597        vtResolveAttribution(
1598          recent
1599        );
1600
1601
1602      var p =
1603        new URLSearchParams();
1604
1605
1606      CALENDLY_FIELDS.forEach(
1607        function (k) {
1608
1609          p.set(
1610            k,
1611            out[k]
1612          );
1613
1614        }
1615      );
1616
1617
1618      return (
1619        CAL_URL +
1620        '?' +
1621        p.toString()
1622      );
1623
1624    };
1625
1626
1627  // One form-scoped snapshot, one in-flight request, one reusable booking URL.
1628  window.vtBindLeadForm = function (config) {
1629    var form = document.getElementById(config.formId);
1630    if (!form || form.__vtBound) return;
1631    form.__vtBound = true;
1632    var container = form.closest('.w-form') || form.parentElement;
1633    var state = { pending: false, delivered: false, snapshot: null, url: '' };
1634    function field(key) {
1635      var id = config.fields[key];
1636      return Array.prototype.find.call(form.querySelectorAll('input, select, textarea'), function (el) { return el.id === id; });
1637    }
1638    var missing = Object.keys(config.fields).filter(function (key) { return !field(key); });
1639    if (missing.length) console.error('[vt] Missing configured fields in ' + config.formName + ': ' + missing.join(', '));
1640    function value(key) { var el = field(key); return el ? String(el.value || '').trim() : ''; }
1641    var panel = document.createElement('div');
1642    panel.setAttribute('role', 'status');
1643    panel.setAttribute('aria-live', 'polite');
1644    panel.hidden = true;
1645    panel.style.cssText = 'margin-top:16px;padding:16px;border:1px solid currentColor;border-radius:8px';
1646    var message = document.createElement('p');
1647    var link = document.createElement('a');
1648    link.textContent = 'Book your discovery call';
1649    link.style.cssText = 'display:inline-block;text-decoration:underline;margin-right:16px';
1650    // An ordinary same-tab anchor always works even when popup assets fail.
1651    var retry = document.createElement('button');
1652    retry.type = 'button'; retry.textContent = 'Retry sending details'; retry.hidden = true;
1653    panel.appendChild(message); panel.appendChild(link); panel.appendChild(retry);
1654    container.appendChild(panel);
1655    function show(text) { panel.hidden = false; message.textContent = text; link.href = state.url; }
1656    function send() {
1657      if (state.pending || state.delivered) return;
1658      state.pending = true; retry.hidden = true;
1659      show('Sending your details. You can book your discovery call below.');
1660      return window.vtHandleFormSuccess({}, { extra: state.snapshot, redirect: false }).then(function () {
1661        state.pending = false; state.delivered = true;
1662        show('Your details have been received. Book your discovery call below.');
1663      }).catch(function () {
1664        state.pending = false; retry.hidden = false;
1665        show('We could not confirm delivery of your details. Please retry. You can also book your call below.');
1666        console.warn('[vt] Make delivery was not confirmed for ' + config.formName);
1667      });
1668    }
1669    retry.addEventListener('click', send);
1670    form.addEventListener('submit', function (event) {
1671      var website = field('website');
1672      if (website && website.value.trim() && !/^https?:\/\//i.test(website.value.trim())) website.value = 'https://' + website.value.trim();
1673      var email = field('email');
1674      if (email) email.setCustomValidity(/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value('email')) ? '' : 'Enter a valid email address.');
1675      var first = field('first');
1676      if (first) first.setCustomValidity(value('first') ? '' : 'Enter your first name.');
1677      if (missing.length || !form.checkValidity() || !value('email') || !(value('first') + value('last'))) {
1678        event.preventDefault(); event.stopImmediatePropagation();
1679        if (missing.length) { panel.hidden = false; message.textContent = 'This form is temporarily unavailable. Please use a booking button to contact us.'; link.hidden = true; }
1680        else form.reportValidity();
1681        return;
1682      }
1683      if (state.pending || state.delivered) {
1684        event.preventDefault(); event.stopImmediatePropagation();
1685        show(state.pending ? 'Your details are being sent. Book your call below.' : 'Your details have been received. Book your call below.');
1686        return;
1687      }
1688      // Failed delivery must be retried with the same snapshot and ID.
1689      if (state.snapshot) {
1690        event.preventDefault(); event.stopImmediatePropagation(); send(); return;
1691      }
1692      state.snapshot = {
1693        form_name: config.formName,
1694        name: (value('first') + ' ' + value('last')).trim(),
1695        email: value('email').toLowerCase(), a1: value('phone'),
1696        a2: value('website'), a3: value('how'),
1697        submission_id: 'vt-' + Date.now() + '-' + Math.random().toString(36).slice(2)
1698      };
1699      // Include matching identity and attribution in the native Webflow payload.
1700      var hidden = Object.assign({}, window.vtTracking, window.vtResolveAttribution(), {
1701        submission_id: state.snapshot.submission_id, form_name: config.formName, page_url: window.location.href
1702      });
1703      Object.keys(hidden).forEach(function (key) {
1704        var el = Array.prototype.find.call(form.querySelectorAll('input[type="hidden"]'), function (input) { return input.name === key; });
1705        if (!el) { el = document.createElement('input'); el.type = 'hidden'; el.name = key; el.setAttribute('data-name', key); form.appendChild(el); }
1706        el.value = hidden[key] || '';
1707      });
1708      var prefill = new URLSearchParams();
1709      prefill.set('name', state.snapshot.name); prefill.set('email', state.snapshot.email);
1710      if (state.snapshot.a1) prefill.set('a1', state.snapshot.a1);
1711      if (state.snapshot.a2) prefill.set('a6', state.snapshot.a2);
1712      if (state.snapshot.a3) prefill.set('a5', state.snapshot.a3);
1713      state.url = window.vtBuildCalendlyUrl(prefill.toString());
1714      send(); // Start Make delivery before opening the in-page booking widget.
1715      try { window.vtCalOpen(state.url); } catch (error) { console.warn('[vt] Use the booking link below the form'); }
1716      // Native Webflow storage/email submission remains enabled.
1717    }, true);
1718    ['email', 'first'].forEach(function (key) { var el = field(key); if (el) el.addEventListener('input', function () { el.setCustomValidity(''); }); });
1719  };
1720
1721  /* ─── SITE URL BUILDER ───────────────────────────────────────────── */
1722
1723
1724  window.vtBuildSiteUrl =
1725    function (
1726      path,
1727      extraParams
1728    ) {
1729
1730      var p =
1731        new URLSearchParams(
1732          extraParams || ''
1733        );
1734
1735
1736      return (
1737        path +
1738        (
1739          Array.from(
1740            p.keys()
1741          ).length
1742
1743            ? '?' +
1744              p.toString()
1745
1746            : ''
1747        )
1748      );
1749
1750    };
1751
1752
1753  /* ─── WEBHOOK ────────────────────────────────────────────────────── */
1754
1755
1756  window.vtSendWebhook = function (data, retryCount) {
1757    if (!data || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(data.email || '').trim()) || !String(data.name || '').trim()) {
1758      return Promise.reject(new Error('A valid email and name are required'));
1759    }
1760    retryCount = retryCount || 0;
1761    var controller = typeof AbortController === 'function' ? new AbortController() : null;
1762    var timer = controller ? setTimeout(function () { controller.abort(); }, 10000) : null;
1763    return Promise.resolve().then(function () {
1764      return fetch(WEBHOOK_URL, {
1765        method: 'POST', headers: { 'Content-Type': 'application/json' },
1766        body: JSON.stringify(data), keepalive: true,
1767        signal: controller ? controller.signal : undefined
1768      });
1769    }).then(function (res) {
1770      if (!res.ok) { var error = new Error('HTTP ' + res.status); error.status = res.status; throw error; }
1771      return { delivered: true, submission_id: data.submission_id };
1772    }).catch(function (error) {
1773      if (retryCount < MAX_RETRIES && (!error.status || error.status === 408 || error.status === 429 || error.status >= 500)) {
1774        return new Promise(function (resolve) { setTimeout(resolve, (retryCount + 1) * 1000); })
1775          .then(function () { return window.vtSendWebhook(data, retryCount + 1); });
1776      }
1777      throw error;
1778    }).finally(function () { if (timer) clearTimeout(timer); });
1779  };
1780
1781  /* ─── FORM SUCCESS ───────────────────────────────────────────────── */
1782
1783
1784  window.vtHandleFormSuccess =
1785    function (
1786      fieldMap,
1787      options
1788    ) {
1789
1790      options =
1791        options ||
1792        {};
1793
1794
1795      var payload =
1796        Object.assign(
1797          {},
1798          tracking,
1799          vtResolveAttribution(),
1800          options.extra || {}
1801        );
1802
1803
1804      /* Facebook */
1805
1806      var fbParams =
1807        window.vtBuildFbParams();
1808
1809
1810      payload.fbc =
1811        fbParams.fbc;
1812
1813      payload.fbp =
1814        fbParams.fbp;
1815
1816
1817      /* Page attribution evidence */
1818
1819      payload.page_url =
1820        window.location.href;
1821
1822      payload.referrer =
1823        document.referrer ||
1824        '';
1825
1826
1827      /*
1828       * Preserve the referrer path/query independently.
1829       *
1830       * This is especially useful when investigating AI traffic later.
1831       *
1832       * Example:
1833       *
1834       * /copilotsearch?q=...
1835       * /search?q=...&udm=50
1836       */
1837
1838      payload.attribution_referrer_host =
1839        '';
1840
1841      payload.attribution_referrer_path =
1842        '';
1843
1844
1845      try {
1846
1847        if (
1848          document.referrer
1849        ) {
1850
1851          var attributionRef =
1852            new URL(
1853              document.referrer
1854            );
1855
1856
1857          payload.attribution_referrer_host =
1858            attributionRef.hostname;
1859
1860
1861          payload.attribution_referrer_path =
1862            attributionRef.pathname +
1863            attributionRef.search;
1864
1865        }
1866
1867      } catch (e) {}
1868
1869
1870      /* Useful debugging / analytics value */
1871
1872      var resolvedAttribution =
1873        vtResolveAttribution();
1874
1875
1876      payload.attribution_source =
1877        resolvedAttribution.utm_source;
1878
1879      payload.attribution_medium =
1880        resolvedAttribution.utm_medium;
1881
1882
1883      /* Form fields */
1884
1885      var rawValues = {};
1886
1887
1888      Object.keys(
1889        fieldMap || {}
1890      ).forEach(
1891        function (key) {
1892
1893          var el =
1894            document.getElementById(
1895              fieldMap[key]
1896            );
1897
1898
1899          rawValues[key] =
1900            el
1901              ? el.value || ''
1902              : '';
1903
1904        }
1905      );
1906
1907
1908      if (
1909        'email' in
1910        rawValues
1911      ) {
1912
1913        payload.email =
1914          (
1915            rawValues.email ||
1916            ''
1917          )
1918            .toLowerCase()
1919            .trim();
1920
1921      }
1922
1923
1924      payload.email =
1925        payload.email ||
1926        '';
1927
1928
1929      if (
1930        'name' in
1931        rawValues
1932      ) {
1933
1934        payload.name =
1935          (
1936            rawValues.name ||
1937            ''
1938          ).trim();
1939
1940      }
1941
1942
1943      payload.name =
1944        payload.name ||
1945        '';
1946
1947
1948      var email =
1949        payload.email;
1950
1951
1952      Object.keys(
1953        rawValues
1954      ).forEach(
1955        function (key) {
1956
1957          if (
1958            key === 'name' ||
1959            key === 'email'
1960          ) {
1961            return;
1962          }
1963
1964
1965          var val =
1966            rawValues[key];
1967
1968
1969          if (
1970            key === 'website' &&
1971            val
1972          ) {
1973
1974            val =
1975              val.trim();
1976
1977
1978            if (
1979              val &&
1980              !val.match(
1981                /^https?:\/\//
1982              )
1983            ) {
1984
1985              val =
1986                'https://' +
1987                val;
1988
1989            }
1990
1991          }
1992
1993
1994          payload[key] =
1995            typeof val ===
1996            'string'
1997              ? val.trim()
1998              : val;
1999
2000        }
2001      );
2002
2003
2004      if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(payload.email) || !String(payload.name).trim()) {
2005        return Promise.reject(new Error('A valid email and name are required'));
2006      }
2007      payload.submission_id = payload.submission_id || ('vt-' + Date.now() + '-' + Math.random().toString(36).slice(2));
2008
2009      /* Meta Lead conversion */
2010
2011      window.vtTrackMetaLead();
2012
2013
2014      var webhookPromise =
2015        window.vtSendWebhook(
2016          payload
2017        );
2018
2019
2020      return Promise.resolve(webhookPromise).then(function (result) {
2021        if (options.redirect !== false) {
2022          window.location.href = window.vtBuildSiteUrl(CONTACTED_URL,
2023            'name=' + encodeURIComponent(payload.name) + '&email=' + encodeURIComponent(payload.email));
2024        }
2025        return { payload: payload, delivery: result };
2026      });
2027
2028    };
2029
2030
2031  /* ─── CALENDLY POPUP ─────────────────────────────────────────────── */
2032
2033
2034  var CAL_ASSETS =
2035    'https://assets.calendly.com/assets/external/';
2036
2037
2038  var BOOK_SELECTOR =
2039    '.vt-book-btn, .nav-cta, .calendly-button, .rl-btnh';
2040
2041
2042  function vtLoadCalAssets(cb) {
2043
2044    if (
2045      window.Calendly
2046    ) {
2047
2048      if (cb) {
2049        cb();
2050      }
2051
2052      return;
2053
2054    }
2055
2056
2057    if (
2058      !document.querySelector(
2059        'link[data-vt-cal]'
2060      )
2061    ) {
2062
2063      var l =
2064        document.createElement(
2065          'link'
2066        );
2067
2068
2069      l.rel =
2070        'stylesheet';
2071
2072      l.href =
2073        CAL_ASSETS +
2074        'widget.css';
2075
2076      l.setAttribute(
2077        'data-vt-cal',
2078        '1'
2079      );
2080
2081      document.head.appendChild(
2082        l
2083      );
2084
2085    }
2086
2087
2088    var s =
2089      document.querySelector(
2090        'script[data-vt-cal]'
2091      );
2092
2093
2094    if (!s) {
2095
2096      s =
2097        document.createElement(
2098          'script'
2099        );
2100
2101
2102      s.src =
2103        CAL_ASSETS +
2104        'widget.js';
2105
2106      s.async =
2107        true;
2108
2109      s.setAttribute(
2110        'data-vt-cal',
2111        '1'
2112      );
2113
2114
2115      document.head.appendChild(
2116        s
2117      );
2118
2119    }
2120
2121
2122    if (cb) {
2123
2124      s.addEventListener(
2125        'load',
2126        cb
2127      );
2128
2129      s.addEventListener(
2130        'error',
2131        cb
2132      );
2133
2134    }
2135
2136  }
2137
2138
2139  window.vtCalOpen =
2140    function (url) {
2141
2142      vtLoadCalAssets(
2143        function () {
2144
2145          if (
2146            window.Calendly &&
2147            typeof window.Calendly
2148              .initPopupWidget ===
2149              'function'
2150          ) {
2151
2152            window.Calendly
2153              .initPopupWidget({
2154                url: url
2155              });
2156
2157          } else {
2158
2159            window.location.assign(url);
2160
2161          }
2162
2163        }
2164      );
2165
2166    };
2167
2168
2169  window.vtCalClose =
2170    function () {
2171
2172      if (
2173        window.Calendly &&
2174        typeof window.Calendly
2175          .closePopupWidget ===
2176          'function'
2177      ) {
2178
2179        window.Calendly
2180          .closePopupWidget();
2181
2182      }
2183
2184    };
2185
2186
2187  /* Warm Calendly assets */
2188
2189  function vtWarm(e) {
2190
2191    var t =
2192      e.target;
2193
2194
2195    if (
2196      t &&
2197      t.closest &&
2198      t.closest(
2199        BOOK_SELECTOR
2200      )
2201    ) {
2202
2203      vtLoadCalAssets();
2204
2205    }
2206
2207  }
2208
2209
2210  document.addEventListener(
2211    'mouseover',
2212    vtWarm,
2213    true
2214  );
2215
2216
2217  document.addEventListener(
2218    'touchstart',
2219    vtWarm,
2220    {
2221      capture: true,
2222      passive: true
2223    }
2224  );
2225
2226
2227  /* Booking click */
2228
2229  document.addEventListener(
2230
2231    'click',
2232
2233    function (e) {
2234
2235      var btn =
2236        e.target.closest(
2237          BOOK_SELECTOR
2238        );
2239
2240
2241      if (!btn) {
2242        return;
2243      }
2244
2245
2246      e.preventDefault();
2247
2248      e.stopPropagation();
2249
2250
2251      /* Meta Lead conversion */
2252
2253      window.vtTrackMetaLead();
2254
2255
2256      window.vtCalOpen(
2257        window
2258          .vtBuildCalendlyPopupUrl()
2259      );
2260
2261    },
2262
2263    true
2264
2265  );
2266
2267
2268  /* Escape closes popup */
2269
2270  document.addEventListener(
2271    'keydown',
2272    function (e) {
2273
2274      if (
2275        e.key ===
2276        'Escape'
2277      ) {
2278
2279        window.vtCalClose();
2280
2281      }
2282
2283    }
2284  );
2285
2286})();
2287
2288
2289/* ─── MISC UI ──────────────────────────────────────────────────────── */
2290
2291(function () {
2292
2293  window.vtToggle =
2294    function () {
2295
2296      var popup =
2297        document.getElementById(
2298          'vt-popup'
2299        );
2300
2301
2302      if (!popup) {
2303        return;
2304      }
2305
2306
2307      popup.classList.toggle(
2308        'open'
2309      );
2310
2311    };
2312
2313})();
2314</script>
2314
2315<!-- Google Tag Manager -->
2316<script>
vendor: 415 bytes, lines 2316-2326
2316
2317  (function (w, d, s, l, i) {
2318    w[l] = w[l] || [];
2319    w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
2320    var f = d.getElementsByTagName(s)[0],
2321      j = d.createElement(s),
2322      dl = l != 'dataLayer' ? '&l=' + l : '';
2323    j.async = true;
2324    j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
2325    f.parentNode.insertBefore(j, f);
2326  })(window, document, 'script', 'dataLayer', '
2326GTM-TM59XZLC
vendor: 4 bytes, line 2326
2326');
2327</script>
2327
2328<!-- End Google Tag Manager -->
2329<script type="text/javascript">
2330  (function (c, l, a, r, i, t, y) {
2331    c[a] =
2332      c[a] ||
2333      function () {
2334        (c[a].q = c[a].q || []).push(arguments);
2335      };
2336    t = l.createElement(r);
2337    t.async = 1;
2338    t.src = 'https://www.clarity.ms/tag/' + i;
2339    y = l.getElementsByTagName(r)[0];
2340    y.parentNode.insertBefore(t, y);
2341  })(window, document, 'clarity', 'script', 'xolf7gqmu0');
2342</script>
2342
2343<!-- Twitter conversion tracking base code -->
2344<script>
2345  !(function (e, t, n, s, u, a) {
2346    e.twq ||
2347      ((s = e.twq =
2348        function () {
2349          s.exe ? s.exe.apply(s, arguments) : s.queue.push(arguments);
2350        }),
2351      (s.version = '1.1'),
2352      (s.queue = []),
2353      (u = t.createElement(n)),
2354      (u.async = !0),
2355      (u.src = 'https://static.ads-twitter.com/uwt.js'),
2356      (a = t.getElementsByTagName(n)[0]),
2357      a.parentNode.insertBefore(u, a));
2358  })(window, document, 'script');
2359  twq('config', 'orzga');
2360</script>
2360
2361<!-- End Twitter conversion tracking base code -->
2362<script>
2363  !(function () {
2364    var reb2b = (window.reb2b = window.reb2b || []);
2365    if (reb2b.invoked) return;
2366    reb2b.invoked = true;
2367    reb2b.methods = ['identify', 'collect'];
2368    reb2b.factory = function (method) {
2369      return function () {
2370        var args = Array.prototype.slice.call(arguments);
2371        args.unshift(method);
2372        reb2b.push(args);
2373        return reb2b;
2374      };
2375    };
2376    for (var i = 0; i < reb2b.methods.length; i++) {
2377      var key = reb2b.methods[i];
2378      reb2b[key] = reb2b.factory(key);
2379    }
2380    reb2b.load = function (key) {
2381      var script = document.createElement('script');
2382      script.type = 'text/javascript';
2383      script.async = true;
2384      script.src = 'https://s3-us-west-2.amazonaws.com/b2bjsstore/b/' + key + '/Y46DJ4HJJ161.js.gz';
2385      var first = document.getElementsByTagName('script')[0];
2386      first.parentNode.insertBefore(script, first);
2387    };
2388    reb2b.SNIPPET_VERSION = '1.0.1';
2389    reb2b.load('Y46DJ4HJJ161');
2390  })();
2391</script>
2391
2392<!-- Reddit Pixel -->
2393<script>
2394  !(function (w, d) {
2395    if (!w.rdt) {
2396      var p = (w.rdt = function () {
2397        p.sendEvent ? p.sendEvent.apply(p, arguments) : p.callQueue.push(arguments);
2398      });
2399      p.callQueue = [];
2400      var t = d.createElement('script');
2401      ((t.src = 'https://www.redditstatic.com/ads/pixel.js'), (t.async = !0));
2402      var s = d.getElementsByTagName('script')[0];
2403      s.parentNode.insertBefore(t, s);
2404    }
2405  })(window, document);
2406  rdt('init', 'a2_gjhmhmki42mt');
2407  rdt('track', 'PageVisit');
2408</script>
2408
2409<!-- DO NOT MODIFY UNLESS TO REPLACE A USER IDENTIFIER -->
2410<!-- End Reddit Pixel -->
2411<!-- Meta Pixel Code -->
2412<script>
2413  !(function (f, b, e, v, n, t, s) {
2414    if (f.fbq) return;
2415    n = f.fbq = function () {
2416      n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);
2417    };
2418    if (!f._fbq) f._fbq = n;
2419    n.push = n;
2420    n.loaded = !0;
2421    n.version = '2.0';
2422    n.queue = [];
2423    t = b.createElement(e);
2424    t.async = !0;
2425    t.src = v;
2426    s = b.getElementsByTagName(e)[0];
2427    s.parentNode.insertBefore(t, s);
2428  })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
2429  fbq('init', '149301424004448');
2430  fbq('track', 'PageView');
2431</script>
2431
2432<noscript><img height="1" width="1" style="display: none" src="https://www.facebook.com/tr?id=149301424004448&ev=PageView&noscript=1" /></noscript>
2433<!-- End Meta Pixel Code -->
2434<!-- Apollo Pixel Code Start -->
2435<script>
2436  function initApollo() {
2437    var n = Math.random().toString(36).substring(7),
2438      o = document.createElement('script');
2439    ((o.src = 'https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=' + n),
2440      (o.async = !0),
2441      (o.defer = !0),
2442      (o.onload = function () {
2443        window.trackingFunctions.onLoad({ appId: '6631180bd6844001c798a60c' });
2444      }),
2445      document.head.appendChild(o));
2446  }
2447  initApollo();
2448
2449
2450
2451</script>
2451
2452<!-- Apollo Pixel Code End -->
2453
2454<!-- Chat gpt -->
2455<script>
2456  window.oaiq = window.oaiq || function () {
2457    (window.oaiq.q = window.oaiq.q || []).push(arguments);
2458  };
2459  oaiq("init", { pixelId: "FcGU8ooMkLeFRWmmBpb7HF" });
2460</script>
vendor: 1 bytes, line 2460
2460
2461<script async src="https://bzrcdn.openai.com/sdk/oaiq.min.js"></script>
2461
2462<!-- chat gpt end -->
2463<script>
2464(function () {
2465  function init() {
2466    if (typeof window.vtBindLeadForm !== "function") { console.error("[vt] Install the fixed global head code first"); return; }
2467    window.vtBindLeadForm({"formId": "wf-form-Pricing---Form", "formName": "pricing", "fields": {"first": "First-Name-4", "last": "Last-Name-4", "email": "Email-5", "phone": "Phone-number-2", "website": "Website", "how": "How"}});
2468  }
2469  if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", init); else init();
2470})();
2471
2472</script>
2472
2473<meta property="og:url" content="https://www.virtustant.com/pricing" />
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F652d31f3dc22d7b4ee708e44%2F6a5c022e43a0b1ee56eb502f%2Fclarity_script-1.1.2.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a8609cdb612f9f008e6c97c%2Fahrefswebanalytics-1.0.0.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a1dba27e54d59ac6cd20aea%2Frevafaqschema-0.0.1.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a2333c3178ec14b5829dce1%2Fvirtustantschema-1.0.0-1780692107254.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a2607fb0b3e9c6cae9992d9%2Fcover_aspect_ratio_fix-1.0.0-1780877769843.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a860a629cf7ec3efa898070%2Fvsrrefine-1.0.1.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a2fb4414bc14d1149160bc0%2Fvsrcards1-1.0.0-1781537843852.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a3549906d21b2314d2ed168%2Foutsourcevafaq-1.0.0.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a3091f50a8ccf650007362c%2Frolespolish3-1.0.0-1785600387629.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a6bca4bbe23e15b7ae980fd%2Fvtdedupetitle-1.0.0.js" type="text/javascript"></script>
2474<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F6920e91076f71b3b0ca97a18%2F6a25c59150de93d0a79918be%2Fgoogle_tag-0.0.3.js" type="text/javascript" data-gtag-id="AW-11153406344"></script>
2474</head><body class="body-3"><div class="div-block-68"><div data-duration="400" data-animation="default" data-collapse="medium" data-easing="ease" data-easing2="ease" role="banner" class="navbar-5 w-nav"><div class="container-15 w-container"><a href="/" class="brand-5 w-nav-brand"><img src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/66fecfd9dda6ca6d78d7cddb_256x256.png" loading="lazy" width="32" height="32" alt="Virtustant icon" class="nav-logo-img"/><div class="nav-brand-text">Virtustant</div></a><nav role="navigation" class="nav-menu-4 w-nav-menu"><a href="/services" class="new-nav-link w-nav-link">Services</a><a href="/roles" class="new-nav-link">Roles</a><a href="/about-us" class="new-nav-link w-nav-link">About us</a><a href="/pricing" aria-current="page" class="new-nav-link w-nav-link w--current">Pricing</a><a href="/testimonials" class="new-nav-link">Testimonials</a><a href="/contact-us" class="new-nav-link w-nav-link">Contact Us</a><a href="/referral" class="new-nav-link w-nav-link">Refer a Business</a><a href="https://calendly.com/d/cm4v-bxb-7hy/discovery-call-virtustant?utm_source=webpage" class="nav-cta mobile-cta calendly-button w-button">Book a free consultation</a><a href="https://jobs.virtustant.com/" class="nav-apply-link">Apply for a Job</a></nav><a href="https://calendly.com/d/cm4v-bxb-7hy/discovery-call-virtustant" class="nav-cta calendly-button w-button">Book a free consultation</a><div class="menu-button-3 w-nav-button"><div class="icon-4 w-icon-nav-menu"></div></div></div><div class="w-embed w-script"><style>
2475.vt-nav-track{position:absolute;left:20px;right:20px;bottom:6px;height:3px;border-radius:99px;overflow:hidden;display:none;pointer-events:none}
2476.vt-nav-track b{display:block;height:100%;width:100%;border-radius:99px;background:#F26522;transform:scaleX(0);transform-origin:0 50%;opacity:0}
2477@supports (animation-timeline: scroll()){
2478.vt-nav-track{display:block}
2479.vt-nav-track b{animation:vtnp linear both;animation-timeline:scroll(root)}
2480}
2481@keyframes vtnp{0%{transform:scaleX(0);opacity:0}3%{opacity:1}100%{transform:scaleX(1);opacity:1}}
2482@media(max-width:767px){.vt-nav-track{left:16px;right:16px;bottom:4px}}
2483.container-15.w-container::before,.container-15.w-container::after{display:none}
2484.menu-button-3 .w-icon-nav-menu{color:#232323 !important;position:relative;display:block}
2485.menu-button-3 .w-icon-nav-menu::before{display:block;transition:opacity .16s ease,transform .24s ease}
2486.menu-button-3.w--open .w-icon-nav-menu::before{opacity:0;transform:rotate(90deg) scale(.6)}
2487.menu-button-3 .w-icon-nav-menu::after{content:"\2715";position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-size:21px;opacity:0;transform:rotate(-90deg) scale(.6);transition:opacity .18s ease,transform .24s ease}
2488.menu-button-3.w--open .w-icon-nav-menu::after{opacity:1;transform:rotate(0deg) scale(1)}
2489.menu-button-3.w--open{background-color:transparent !important;color:#232323}
2490@media(max-width:991px){
2491.w-nav-overlay .nav-cta.mobile-cta{display:block;width:100%;text-align:center;padding:15px 18px;font-size:16px;margin-top:28px}
2492.w-nav-overlay .nav-apply-link{display:block;width:100%;text-align:center;font-size:16px;font-weight:600;color:#232323 !important;background:#fff;border:1px solid rgba(0,0,0,.14);border-radius:999px;padding:14px 18px;margin-top:4px;text-decoration:none;opacity:1 !important}
2493.w-nav-overlay [data-nav-menu-open]{animation:vtsheet .28s ease both}
2494}
2495@keyframes vtsheet{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
2496@media (min-width:992px) and (max-width:1079px){.nav-menu-4 .nav-apply-link{display:none}}
2497</style>
2498<div class="vt-nav-track"><b></b></div>
2499<script>window.Webflow=window.Webflow||[];window.Webflow.push(function(){try{var n=document.querySelector('.w-nav[data-collapse]');if(n){n.setAttribute('data-duration','100');}var d=window.Webflow.require&&window.Webflow.require('navbar');if(d&&d.destroy&&d.ready){d.destroy();d.ready();}}catch(e){}});</script>
2499</div></div></div><section class="section-7"><div class="w-embed w-script"><!-- VIRTUSTANT PRICING - SALARY ESTIMATOR (final)
2500     Paste this whole block into the Pricing page estimator Custom Code
2501     embed, replacing the current code. Region multipliers are in the
2502     REGION object near the bottom of the script, edit freely. -->
2503<style>
2504  .ve {
2505    --orange: #ff5a1f;
2506    --ink: #16161a;
2507    --dim: rgba(0, 0, 0, 0.55);
2508    --mut: rgba(0, 0, 0, 0.42);
2509    --line: rgba(0, 0, 0, 0.1);
2510    --soft: #f7f7f8;
2511    box-sizing: border-box;
2512    max-width: 980px;
2513    margin: 0 auto;
2514    color: var(--ink);
2515    font-family: 'Montserrat', system-ui, sans-serif;
2516    padding: 44px 24px 32px;
2517    text-align: center;
2518  }
2519  .ve *,
2520  .ve *::before,
2521  .ve *::after {
2522    box-sizing: border-box;
2523  }
2524  .ve-eyebrow {
2525    display: inline-flex;
2526    align-items: center;
2527    gap: 7px;
2528    font-size: 12px;
2529    font-weight: 600;
2530    color: var(--orange);
2531    background: rgba(255, 90, 31, 0.08);
2532    border: 1px solid rgba(255, 90, 31, 0.25);
2533    border-radius: 999px;
2534    padding: 7px 13px;
2535    margin: 0 0 14px;
2536  }
2537  .ve-h {
2538    font-family: 'Montserrat', system-ui, sans-serif;
2539    font-weight: 600;
2540    font-size: clamp(2rem, 5.4vw, 4rem);
2541    line-height: 1.02;
2542    letter-spacing: -0.035em;
2543    color: #000;
2544    text-align: center;
2545    margin: 0 0 24px;
2546  }
2547  .ve-h em {
2548    font-family: 'RocaTwo', Georgia, serif;
2549    font-style: italic;
2550    font-weight: 400;
2551    color: var(--orange);
2552  }
2553  .ve-card {
2554    background: #fff;
2555    border: 1px solid var(--line);
2556    border-radius: 18px;
2557    box-shadow: 0 12px 34px rgba(0, 0, 0, 0.05);
2558    text-align: left;
2559  }
2560  .ve-head {
2561    display: flex;
2562    align-items: center;
2563    justify-content: space-between;
2564    padding: 18px 28px;
2565    border-bottom: 1px solid var(--line);
2566  }
2567  .ve-head h3 {
2568    margin: 0;
2569    font-size: 15px;
2570    font-weight: 600;
2571  }
2572  .ve-live {
2573    display: inline-flex;
2574    align-items: center;
2575    gap: 7px;
2576    font-size: 12px;
2577    color: var(--dim);
2578  }
2579  .ve-live::before {
2580    content: '';
2581    width: 7px;
2582    height: 7px;
2583    border-radius: 50%;
2584    background: #2bb673;
2585  }
2586  .ve-main {
2587    display: grid;
2588    grid-template-columns: 1.4fr 1fr;
2589    gap: 40px;
2590    padding: 30px 28px;
2591    align-items: stretch;
2592  }
2593  .ve-fields {
2594    display: flex;
2595    flex-direction: column;
2596    gap: 22px;
2597  }
2598  .ve-field {
2599    min-width: 0;
2600  }
2601  .ve-lbl {
2602    display: flex;
2603    align-items: center;
2604    gap: 7px;
2605    font-size: 11px;
2606    font-weight: 600;
2607    letter-spacing: 0.1em;
2608    text-transform: uppercase;
2609    color: var(--dim);
2610    margin: 0 0 9px;
2611  }
2612  .ve-lbl svg {
2613    width: 15px;
2614    height: 15px;
2615    stroke: var(--mut);
2616    fill: none;
2617  }
2618  .ve-combo {
2619    position: relative;
2620  }
2621  .ve-combo > svg {
2622    position: absolute;
2623    left: 13px;
2624    top: 50%;
2625    transform: translateY(-50%);
2626    width: 16px;
2627    height: 16px;
2628    stroke: var(--mut);
2629    fill: none;
2630    pointer-events: none;
2631  }
2632  .ve-combo input {
2633    width: 100%;
2634    padding: 13px 14px 13px 38px;
2635    border: 1px solid var(--line);
2636    border-radius: 10px;
2637    background: #fff;
2638    font-size: 14px;
2639    font-weight: 600;
2640    color: var(--ink);
2641    font-family: inherit;
2642  }
2643  .ve-combo input:focus {
2644    outline: none;
2645    border-color: var(--orange);
2646    box-shadow: 0 0 0 3px rgba(255, 90, 31, 0.14);
2647  }
2648  .ve-list {
2649    position: absolute;
2650    top: calc(100% + 6px);
2651    left: 0;
2652    right: 0;
2653    background: #fff;
2654    border: 1px solid var(--line);
2655    border-radius: 12px;
2656    box-shadow: 0 14px 34px rgba(0, 0, 0, 0.12);
2657    max-height: 248px;
2658    overflow: auto;
2659    z-index: 20;
2660    padding: 6px;
2661    display: none;
2662  }
2663  .ve-list.open {
2664    display: block;
2665  }
2666  .ve-item {
2667    display: flex;
2668    align-items: center;
2669    justify-content: space-between;
2670    gap: 10px;
2671    padding: 9px 11px;
2672    border-radius: 8px;
2673    font-size: 13.5px;
2674    font-weight: 500;
2675    cursor: pointer;
2676  }
2677  .ve-item:hover {
2678    background: var(--soft);
2679  }
2680  .ve-item span {
2681    font-size: 11px;
2682    color: var(--mut);
2683    font-weight: 500;
2684  }
2685  .ve-empty {
2686    padding: 14px;
2687    text-align: center;
2688    color: var(--mut);
2689    font-size: 13px;
2690    display: none;
2691  }
2692  .ve-seg {
2693    display: grid;
2694    gap: 8px;
2695  }
2696  .ve-seg.s3 {
2697    grid-template-columns: 1fr 1fr 1fr;
2698  }
2699  .ve-opt {
2700    display: flex;
2701    align-items: center;
2702    justify-content: center;
2703    gap: 6px;
2704    padding: 11px 6px;
2705    border: 1px solid var(--line);
2706    border-radius: 10px;
2707    background: #fff;
2708    font-size: 12.5px;
2709    font-weight: 600;
2710    color: var(--ink);
2711    cursor: pointer;
2712    transition: 0.15s;
2713    text-align: center;
2714    line-height: 1.15;
2715  }
2716  .ve-opt svg {
2717    width: 15px;
2718    height: 15px;
2719    flex: none;
2720    stroke: currentColor;
2721    fill: none;
2722  }
2723  .ve-opt:hover {
2724    border-color: rgba(0, 0, 0, 0.28);
2725  }
2726  .ve-opt.on {
2727    background: var(--orange);
2728    border-color: var(--orange);
2729    color: #fff;
2730  }
2731  .ve-opt.on svg {
2732    stroke: #fff !important;
2733  }
2734  .ve-switch {
2735    position: relative;
2736    display: grid;
2737    grid-template-columns: 1fr 1fr;
2738    background: var(--soft);
2739    border: 1px solid var(--line);
2740    border-radius: 11px;
2741    padding: 4px;
2742  }
2743  .ve-sw-opt {
2744    position: relative;
2745    z-index: 1;
2746    background: none;
2747    border: none;
2748    padding: 9px;
2749    font-size: 13px;
2750    font-weight: 600;
2751    color: var(--dim);
2752    cursor: pointer;
2753    font-family: inherit;
2754    transition: color 0.2s;
2755    display: flex;
2756    align-items: center;
2757    justify-content: center;
2758    gap: 6px;
2759  }
2760  .ve-sw-opt svg {
2761    width: 15px;
2762    height: 15px;
2763    stroke: currentColor;
2764    fill: none;
2765  }
2766  .ve-sw-opt.on {
2767    color: #fff;
2768  }
2769  .ve-sw-thumb {
2770    position: absolute;
2771    top: 4px;
2772    left: 4px;
2773    width: calc(50% - 4px);
2774    height: calc(100% - 8px);
2775    background: var(--orange);
2776    border-radius: 8px;
2777    transition: transform 0.22s cubic-bezier(0.3, 0.7, 0.3, 1);
2778    z-index: 0;
2779    box-shadow: 0 3px 8px rgba(255, 90, 31, 0.3);
2780  }
2781  .ve-switch[data-v='full'] .ve-sw-thumb {
2782    transform: translateX(100%);
2783  }
2784  .ve-reg {
2785    display: grid;
2786    grid-template-columns: 1fr 1fr;
2787    gap: 8px;
2788  }
2789  .ve-reg .ve-opt {
2790    justify-content: flex-start;
2791    padding: 11px 13px;
2792    font-size: 13px;
2793  }
2794  .ve-reg .ve-opt svg {
2795    width: 20px;
2796    height: 20px;
2797    fill: currentColor;
2798    stroke: none;
2799  }
2800  .r-latam svg {
2801    fill: #ff7a45;
2802  }
2803  .r-seasia svg {
2804    fill: #1d9e75;
2805  }
2806  .r-safrica svg {
2807    fill: #ba7517;
2808  }
2809  .r-europe svg {
2810    fill: #378add;
2811  }
2812  .ve-reg .ve-opt.on svg {
2813    fill: #fff;
2814  }
2815  .ve-result {
2816    background: var(--soft);
2817    border-radius: 14px;
2818    padding: 34px 26px;
2819    display: flex;
2820    flex-direction: column;
2821    align-items: center;
2822    justify-content: center;
2823    text-align: center;
2824  }
2825  .ve-res-cap {
2826    font-size: 11px;
2827    font-weight: 600;
2828    letter-spacing: 0.14em;
2829    text-transform: uppercase;
2830    color: var(--mut);
2831    margin-bottom: 14px;
2832  }
2833  .ve-rate {
2834    font-size: 42px;
2835    font-weight: 700;
2836    letter-spacing: -0.025em;
2837    color: var(--orange);
2838    line-height: 1;
2839    white-space: nowrap;
2840  }
2841  .ve-rate span {
2842    font-size: 15px;
2843    font-weight: 500;
2844    color: var(--dim);
2845  }
2846  .ve-note {
2847    font-size: 13px;
2848    color: var(--dim);
2849    margin-top: 10px;
2850    min-height: 18px;
2851  }
2852  .ve-cta {
2853    display: inline-flex;
2854    align-items: center;
2855    gap: 8px;
2856    background: var(--orange);
2857    color: #fff;
2858    text-decoration: none;
2859    font-size: 14px;
2860    font-weight: 700;
2861    padding: 13px 22px;
2862    border-radius: 11px;
2863    margin-top: 24px;
2864    box-shadow: 0 6px 16px rgba(255, 90, 31, 0.25);
2865  }
2866  .ve-cta svg {
2867    width: 16px;
2868    height: 16px;
2869    stroke: #fff;
2870    fill: none;
2871  }
2872  .ve-sub {
2873    font-size: 12px;
2874    color: var(--mut);
2875    margin-top: 12px;
2876  }
2877  @media (max-width: 720px) {
2878    .ve {
2879      padding: 20px 10px;
2880    }
2881    .ve-h {
2882      margin-bottom: 18px;
2883    }
2884    .ve-main {
2885      grid-template-columns: 1fr;
2886      gap: 22px;
2887      padding: 22px 18px;
2888    }
2889    .ve-head {
2890      padding: 15px 18px;
2891    }
2892    .ve-result {
2893      padding: 26px 20px;
2894    }
2895    .ve-rate {
2896      font-size: 38px;
2897    }
2898  }
2899  @media (max-width: 480px) {
2900    .ve-main {
2901      padding: 20px 14px;
2902      gap: 20px;
2903    }
2904    .ve-eyebrow {
2905      font-size: 11px;
2906      padding: 6px 11px;
2907    }
2908    .ve-opt {
2909      font-size: 11.5px;
2910      padding: 10px 4px;
2911      gap: 4px;
2912    }
2913    .ve-opt svg {
2914      width: 13px;
2915      height: 13px;
2916    }
2917    .ve-reg .ve-opt {
2918      font-size: 12px;
2919      padding: 10px 11px;
2920    }
2921    .ve-reg .ve-opt svg {
2922      width: 17px;
2923      height: 17px;
2924    }
2925    .ve-sw-opt {
2926      font-size: 12px;
2927    }
2928  }
2929</style>
2930<div class="ve">
2931  <span class="ve-eyebrow"
2932    ><svg viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.2" fill="none" width="13" height="13"><path d="M20 6 9 17l-5-5" /></svg>Zero service fees &middot; Lifetime replacement</span
2933  >
2934  <h1 class="ve-h">How much does it cost to hire <em>your next team member?</em></h1>
2935  <div class="ve-card">
2936    <div class="ve-head">
2937      <h3>Client Rate Estimator</h3>
2938      <span class="ve-live">Real time estimate</span>
2939    </div>
2940    <div class="ve-main">
2941      <div class="ve-fields">
2942        <div class="ve-field">
2943          <div class="ve-lbl">
2944            <svg viewBox="0 0 24 24" stroke-width="2">
2945              <circle cx="12" cy="8" r="4" />
2946              <path d="M4 21c0-4 3.6-6 8-6s8 2 8 6" /></svg
2947            >Role
2948          </div>
2949          <div class="ve-combo">
2950            <svg viewBox="0 0 24 24" stroke-width="2">
2951              <circle cx="11" cy="11" r="7" />
2952              <path d="M21 21l-4.3-4.3" />
2953            </svg>
2954            <input id="ve-search" type="text" placeholder="Search a role" autocomplete="off" />
2955            <div class="ve-list" id="ve-list"></div>
2956          </div>
2957        </div>
2958        <div class="ve-field">
2959          <div class="ve-lbl">
2960            <svg viewBox="0 0 24 24" stroke-width="2"><path d="M4 20v-3M12 20v-9M20 20v-6" /></svg>Experience
2961          </div>
2962          <div class="ve-seg s3" id="ve-exp">
2963            <div class="ve-opt" data-v="entry">
2964              <svg viewBox="0 0 24 24" stroke-width="2.4" stroke-linecap="round">
2965                <path d="M6 20v-4" />
2966                <path d="M12 20v-4" opacity=".3" />
2967                <path d="M18 20v-4" opacity=".3" /></svg
2968              >Entry
2969            </div>
2970            <div class="ve-opt on" data-v="mid">
2971              <svg viewBox="0 0 24 24" stroke-width="2.4" stroke-linecap="round">
2972                <path d="M6 20v-4" />
2973                <path d="M12 20v-8" />
2974                <path d="M18 20v-4" opacity=".3" /></svg
2975              >Mid
2976            </div>
2977            <div class="ve-opt" data-v="senior">
2978              <svg viewBox="0 0 24 24" stroke-width="2.4" stroke-linecap="round">
2979                <path d="M6 20v-4" />
2980                <path d="M12 20v-8" />
2981                <path d="M18 20v-12" /></svg
2982              >Senior
2983            </div>
2984          </div>
2985        </div>
2986        <div class="ve-field">
2987          <div class="ve-lbl">
2988            <svg viewBox="0 0 24 24" stroke-width="2">
2989              <circle cx="12" cy="12" r="9" />
2990              <path d="M12 7v5l3 2" /></svg
2991            >Schedule
2992          </div>
2993          <div class="ve-switch" id="ve-sched" data-v="full">
2994            <button class="ve-sw-opt" data-v="part" type="button">
2995              <svg viewBox="0 0 24 24" stroke-width="2">
2996                <circle cx="12" cy="12" r="9" />
2997                <path d="M12 12V7" />
2998                <path d="M12 12h4" /></svg
2999              >Part time
3000            </button>
3001            <button class="ve-sw-opt on" data-v="full" type="button">
3002              <svg viewBox="0 0 24 24" stroke-width="2">
3003                <rect x="4" y="5" width="16" height="16" rx="2" />
3004                <path d="M4 9h16M9 3v4M15 3v4" /></svg
3005              >Full time
3006            </button>
3007            <span class="ve-sw-thumb"></span>
3008          </div>
3009        </div>
3010        <div class="ve-field">
3011          <div class="ve-lbl">
3012            <svg viewBox="0 0 24 24" stroke-width="2"><path d="M21 11.5a8 8 0 0 1-11.6 7.1L3 21l2.4-6.4A8 8 0 1 1 21 11.5Z" /></svg>English level
3013          </div>
3014          <div class="ve-seg s3" id="ve-eng">
3015            <div class="ve-opt" data-v="conv">
3016              <svg viewBox="0 0 24 24" stroke-width="2"><path d="M21 11.5a8 8 0 0 1-11.6 7.1L3 21l2.4-6.4A8 8 0 1 1 21 11.5Z" /></svg>Conversational
3017            </div>
3018            <div class="ve-opt on" data-v="fluent">
3019              <svg viewBox="0 0 24 24" stroke-width="2">
3020                <path d="M11 14H6l-3.2 3V6.5A2.5 2.5 0 0 1 5.3 4H11a2.5 2.5 0 0 1 2.5 2.5V11A2.5 2.5 0 0 1 11 14Z" />
3021                <path d="M15.5 9H18a2.5 2.5 0 0 1 2.5 2.5V20l-3-2.5h-4.2A2.4 2.4 0 0 1 11 16.4" /></svg
3022              >Fluent
3023            </div>
3024            <div class="ve-opt" data-v="bilingual">
3025              <svg viewBox="0 0 24 24" stroke-width="2">
3026                <circle cx="12" cy="12" r="9" />
3027                <path d="M3 12h18M12 3c2.6 2.7 2.6 15 0 18M12 3c-2.6 2.7-2.6 15 0 18" /></svg
3028              >Bilingual
3029            </div>
3030          </div>
3031        </div>
3032        <div class="ve-field">
3033          <div class="ve-lbl">
3034            <svg viewBox="0 0 24 24" stroke-width="2">
3035              <circle cx="12" cy="12" r="9" />
3036              <path d="M3 12h18M12 3c2.6 2.7 2.6 15 0 18M12 3c-2.6 2.7-2.6 15 0 18" /></svg
3037            >Region
3038          </div>
3039          <div class="ve-reg" id="ve-region">
3040            <div class="ve-opt on r-latam" data-v="latam">
3041              <svg viewBox="0 0 100 100"><path d="M45 12 C58 10 68 18 70 30 C74 40 70 50 64 60 C60 70 56 80 50 90 C46 96 42 88 42 78 C40 66 34 58 34 44 C33 30 34 18 45 12 Z" /></svg>Latin America
3042            </div>
3043            <div class="ve-opt r-seasia" data-v="seasia">
3044              <svg viewBox="0 0 100 100">
3045                <path d="M34 18 C40 16 47 21 47 28 C48 34 43 39 40 45 C37 50 36 55 32 52 C29 50 31 43 30 36 C29 29 28 23 34 18 Z" />
3046                <circle cx="58" cy="50" r="6" />
3047                <circle cx="70" cy="60" r="5" />
3048                <circle cx="50" cy="64" r="5.5" />
3049                <circle cx="64" cy="42" r="4" /></svg
3050              >Southeast Asia
3051            </div>
3052            <div class="ve-opt r-safrica" data-v="safrica">
3053              <svg viewBox="0 0 100 100"><path d="M24 40 C30 30 45 30 57 33 C67 35 77 39 74 47 C72 55 62 59 54 65 C48 69 43 73 38 68 C32 62 29 57 26 49 C25 45 22 44 24 40 Z" /></svg>South Africa
3054            </div>
3055            <div class="ve-opt r-europe" data-v="europe">
3056              <svg viewBox="0 0 100 100"><path d="M40 14 L52 18 L48 28 L60 26 L72 36 L62 44 L70 52 L56 56 L58 66 L46 62 L40 70 L34 58 L24 56 L30 44 L20 36 L34 32 L28 22 Z" /></svg>Europe
3057            </div>
3058          </div>
3059        </div>
3060      </div>
3061      <div class="ve-result">
3062        <div class="ve-res-cap">Estimated all-in hourly rate</div>
3063        <div class="ve-rate" id="ve-rate">$0<span>/hr</span></div>
3064        <div class="ve-note" id="ve-note"></div>
3065        <a class="ve-cta vt-book-btn" href="https://calendly.com/d/cm4v-bxb-7hy/discovery-call-virtustant" target="_blank" rel="noopener"
3066          >Book a free consultation<svg viewBox="0 0 24 24" stroke-width="2"><path d="M5 12h14M13 6l6 6-6 6" /></svg
3067        ></a>
3068        <div class="ve-sub">No commitment &middot; pay only if you hire</div>
3069      </div>
3070    </div>
3071  </div>
3072</div>
3073<script>
3074  (function () {
3075    var DATA = [
3076      ['va', 'Virtual Assistant', 'Admin', 14, 7],
3077      ['ea', 'Executive Assistant', 'Admin', 17, 8.5],
3078      ['opsCoord', 'Operations Coordinator', 'Admin', 17],
3079      ['projAssist', 'Project Assistant', 'Admin', 15],
3080      ['sdr', 'SDR / BDR', 'Sales', 17, 8],
3081      ['accountExec', 'Account Executive', 'Sales', 23],
3082      ['salesOps', 'Sales Operations', 'Sales', 20],
3083      ['csManager', 'Customer Success Manager', 'Sales', 20],
3084      ['marketing', 'Marketing Specialist', 'Marketing', 19],
3085      ['contentMkt', 'Content Marketer', 'Marketing', 18],
3086      ['socialMedia', 'Social Media Manager', 'Marketing', 17, 8],
3087      ['seoSpec', 'SEO Specialist', 'Marketing', 19],
3088      ['paidAds', 'Paid Ads Specialist', 'Marketing', 20],
3089      ['fullstack', 'Full stack Developer', 'Engineering', 25, 8],
3090      ['frontend', 'Frontend Developer', 'Engineering', 23, 8],
3091      ['backend', 'Backend Developer', 'Engineering', 25, 8],
3092      ['qa', 'QA Engineer', 'Engineering', 19],
3093      ['devops', 'DevOps Engineer', 'Engineering', 25],
3094      ['graphic', 'Graphic Designer', 'Design', 17, 8],
3095      ['ux', 'UX/UI Designer', 'Design', 22, 8],
3096      ['productDsg', 'Product Designer', 'Design', 24, 8],
3097      ['motion', 'Motion Designer', 'Design', 20, 8],
3098      ['csRep', 'Customer Service Rep', 'Support', 13, 7],
3099      ['csLead', 'CS Team Lead', 'Support', 18],
3100      ['support', 'Technical Support', 'Support', 17],
3101      ['bookkeep', 'Bookkeeper', 'Finance', 16, 8.5],
3102      ['staffAcct', 'Staff Accountant', 'Finance', 20],
3103      ['finAnalyst', 'Financial Analyst', 'Finance', 22],
3104      ['controller', 'Controller', 'Finance', 25],
3105    ];
3106    var MAP = {};
3107    DATA.forEach(function (d) {
3108      MAP[d[0]] = { label: d[1], cat: d[2], ceil: d[3], floor: d[4] };
3109    });
3110    var FLOOR = 7,
3111      EB = 0.4,
3112      MB = 0.72,
3113      PART = 0.15;
3114    var ENG = { conv: 1, fluent: 1.08, bilingual: 1.16 };
3115    /* Region multiplier. Latin America is the base (1.00). Edit to your real pricing. */
3116    var REGION = { latam: 1, seasia: 0.85, safrica: 0.9, europe: 1.15 };
3117    var search = document.getElementById('ve-search'),
3118      list = document.getElementById('ve-list'),
3119      rate = document.getElementById('ve-rate'),
3120      note = document.getElementById('ve-note');
3121    var sel = 'va',
3122      aExp = 'mid',
3123      aSched = 'full',
3124      aEng = 'fluent',
3125      aReg = 'latam',
3126      items = [];
3127    DATA.forEach(function (d) {
3128      var i = document.createElement('div');
3129      i.className = 've-item';
3130      i.innerHTML = '<b>' + d[1] + '</b><span>' + d[2] + '</span>';
3131      i.addEventListener('mousedown', function (e) {
3132        e.preventDefault();
3133        pick(d[0]);
3134      });
3135      list.appendChild(i);
3136      items.push(i);
3137    });
3138    var empty = document.createElement('div');
3139    empty.className = 've-empty';
3140    empty.textContent = 'No roles match. We staff custom roles too.';
3141    list.appendChild(empty);
3142    function filt(q) {
3143      q = q.toLowerCase();
3144      var any = false;
3145      items.forEach(function (c, n) {
3146        var m = (DATA[n][1] + ' ' + DATA[n][2]).toLowerCase().indexOf(q) > -1;
3147        c.style.display = m ? '' : 'none';
3148        if (m) any = true;
3149      });
3150      empty.style.display = any ? 'none' : 'block';
3151    }
3152    function pick(id) {
3153      sel = id;
3154      search.value = MAP[id].label;
3155      list.classList.remove('open');
3156      calc();
3157    }
3158    search.addEventListener('focus', function () {
3159      filt('');
3160      list.classList.add('open');
3161      search.select();
3162    });
3163    search.addEventListener('input', function () {
3164      filt(search.value);
3165      list.classList.add('open');
3166    });
3167    document.addEventListener('click', function (e) {
3168      if (!e.target.closest('.ve-combo')) list.classList.remove('open');
3169    });
3170    function seg(id, cb) {
3171      var g = document.getElementById(id);
3172      g.addEventListener('click', function (e) {
3173        var b = e.target.closest('[data-v]');
3174        if (!b) return;
3175        g.querySelectorAll('[data-v]').forEach(function (x) {
3176          x.classList.remove('on');
3177        });
3178        b.classList.add('on');
3179        cb(b.dataset.v);
3180        calc();
3181      });
3182    }
3183    seg('ve-exp', function (v) {
3184      aExp = v;
3185    });
3186    seg('ve-eng', function (v) {
3187      aEng = v;
3188    });
3189    seg('ve-region', function (v) {
3190      aReg = v;
3191    });
3192    var sw = document.getElementById('ve-sched');
3193    sw.addEventListener('click', function (e) {
3194      var b = e.target.closest('.ve-sw-opt');
3195      if (!b) return;
3196      sw.dataset.v = b.dataset.v;
3197      sw.querySelectorAll('.ve-sw-opt').forEach(function (x) {
3198        x.classList.toggle('on', x === b);
3199      });
3200      aSched = b.dataset.v;
3201      calc();
3202    });
3203    function tiers(r) {
3204      if (r._t) return r._t;
3205      var fl = r.floor || FLOOR,
3206        ce = r.ceil;
3207      if (ce < fl + 4) ce = fl + 4;
3208      var s = ce - fl,
3209        e = fl + Math.round(s * EB),
3210        m = fl + Math.round(s * MB);
3211      if (e <= fl) e = fl + 1;
3212      if (m <= e) m = e + 1;
3213      if (ce <= m) ce = m + 1;
3214      return (r._t = { entry: [fl, e], mid: [e + 1, m], senior: [m + 1, ce] });
3215    }
3216    function calc() {
3217      var r = MAP[sel];
3218      if (!r) return;
3219      var b = tiers(r)[aExp];
3220      var mult = ENG[aEng] * REGION[aReg] * (aSched === 'part' ? 1 + PART : 1);
3221      var roleFloor = r.floor || FLOOR;
3222      var lo = Math.max(roleFloor, Math.round(b[0] * mult)),
3223        hi = Math.max(roleFloor, Math.round(b[1] * mult));
3224      if (lo >= hi) hi = lo + 1;
3225      rate.innerHTML = '$' + (lo % 1 ? lo.toFixed(2) : lo) + ' to $' + (hi % 1 ? hi.toFixed(2) : hi) + '<span>/hr</span>';
3226      note.textContent = r.label + (aSched === 'part' ? ' , part time rate' : '');
3227    }
3228    search.value = MAP[sel].label;
3229    calc();
3230  })();
3231</script>
3231</div><div class="w-embed"><!-- Job-seeker deflection line under the salary estimator -->
3232<style>
3233.vt-jobs-note{max-width:980px;margin:-14px auto 0;padding:0 24px 30px;text-align:center;font-family:'Montserrat',system-ui,sans-serif;font-size:13px;line-height:1.5;color:rgba(0,0,0,.55);}
3234.vt-jobs-note a{color:#B8420F;text-decoration:underline;text-underline-offset:2px;font-weight:600;}
3235.vt-jobs-note a:hover{color:#FF5A1F;}
3236@media (max-width:720px){.vt-jobs-note{margin-top:0;padding:0 10px 24px;}}
3237</style>
3238<p class="vt-jobs-note">Looking for a job with Virtustant? <a href="https://jobs.virtustant.com/">Apply at jobs.virtustant.com</a></p></div></section><section class="section-8"><div class="w-embed w-script"><style>.vp-inc{--black:#000000;--white:#FFFFFF;--orange:#FF5A1F;--gray-soft:#F8F8F8;--text-dim:rgba(0,0,0,0.60);--line:rgba(0,0,0,0.08);--line-strong:rgba(0,0,0,0.14);--orange-15:rgba(255,90,31,0.15);--font-sans:'Montserrat', sans-serif;--font-italic:'RocaTwo', serif;font-family:var(--font-sans);-webkit-font-smoothing:antialiased;background:var(--gray-soft);padding:100px 24px;box-sizing:border-box;}.vp-inc *, .vp-inc *::before, .vp-inc *::after{box-sizing:border-box;margin:0;padding:0;}.vp-inc__inner{max-width:1200px;margin:0 auto;}.vp-inc__head{text-align:center;max-width:760px;margin:0 auto 56px;opacity:0;transform:translateY(20px);transition:opacity 0.8s cubic-bezier(0.2,0.8,0.2,1), transform 0.8s cubic-bezier(0.2,0.8,0.2,1);}.vp-inc__head.is-visible{opacity:1;transform:none;}.vp-inc__eyebrow{display:inline-flex;align-items:center;font-size:11px;font-weight:600;letter-spacing:0.16em;text-transform:uppercase;color:var(--orange);margin-bottom:24px;}.vp-inc__heading{font-family:var(--font-sans);font-weight:600;font-size:clamp(2.5rem, 5.4vw, 4rem);line-height:1.02;letter-spacing:-0.035em;color:var(--black);margin-bottom:20px;}.vp-inc__heading em{font-family:var(--font-italic);font-style:italic;font-weight:400;color:var(--orange);}.vp-inc__lede{font-size:18px;line-height:1.6;color:var(--text-dim);margin:0 auto;}.vp-inc__grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:16px;opacity:0;transform:translateY(20px);transition:opacity 0.8s cubic-bezier(0.2,0.8,0.2,1) 0.15s, transform 0.8s cubic-bezier(0.2,0.8,0.2,1) 0.15s;}.vp-inc__grid.is-visible{opacity:1;transform:none;}@media (max-width:900px){.vp-inc__grid{grid-template-columns:repeat(2, 1fr);}}@media (max-width:540px){.vp-inc__grid{grid-template-columns:1fr;}}.vp-inc__card{background:var(--white);border:1px solid var(--line);border-radius:20px;padding:32px 28px;display:flex;flex-direction:column;gap:14px;position:relative;overflow:hidden;transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1), border-color 0.4s ease, box-shadow 0.4s ease;}.vp-inc__card:hover{transform:translateY(-4px);border-color:var(--line-strong);box-shadow:0 18px 44px rgba(0,0,0,0.06);}.vp-inc__top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:4px;}.vp-inc__icon{width:48px;height:48px;border-radius:14px;background:var(--orange-15);color:var(--orange);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:transform 0.4s cubic-bezier(0.3,0,0.15,1), background 0.4s, color 0.4s;}.vp-inc__icon svg{width:22px;height:22px;}.vp-inc__card:hover .vp-inc__icon{transform:rotate(-6deg) scale(1.06);background:var(--orange);color:var(--white);}.vp-inc__stat{font-family:var(--font-italic);font-style:italic;font-size:36px;line-height:1;letter-spacing:-0.03em;color:var(--orange);text-align:right;}.vp-inc__stat small{font-family:var(--font-sans);font-style:normal;font-size:11px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;display:block;color:var(--text-dim);margin-top:2px;}.vp-inc__card h4{font-family:var(--font-sans);font-weight:700;font-size:17px;line-height:1.25;letter-spacing:-0.01em;color:var(--black);}.vp-inc__card p{font-size:14px;line-height:1.55;color:var(--text-dim);flex:1;}.vp-inc__card p strong{color:var(--black);font-weight:600;}.vp-inc__foot{margin-top:12px;padding-top:16px;border-top:1px solid var(--line);font-size:11px;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;color:var(--text-dim);display:inline-flex;align-items:center;gap:8px;transition:color 0.3s ease;}.vp-inc__foot::before{content:'';width:6px;height:6px;background:var(--orange);border-radius:50%;}.vp-inc__card:hover .vp-inc__foot{color:var(--orange);}</style><section class="vp-inc"><div class="vp-inc__inner"><div class="vp-inc__head" id="vpIncHead"><span class="vp-inc__eyebrow">Everything included</span><h2 class="vp-inc__heading">No hidden fees, no surprises. <em>Your hire is fully managed.</em></h2><p class="vp-inc__lede">One all-in hourly rate includes your hire’s pay and the payroll, HR, compliance and ongoing support included in your agreement. No separate recruitment or placement fee.</p></div><div class="vp-inc__grid" id="vpIncGrid"><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg></span><div class="vp-inc__stat">0%<small>tax overhead</small></div></div><h4>No payroll taxes</h4><p>We manage all international payroll and tax compliance. No local entities needed, no legal headaches for you.</p><span class="vp-inc__foot">Compliance handled</span></div><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></span><div class="vp-inc__stat">$0<small>extras</small></div></div><h4>No benefits overhead</h4><p>Health insurance, workstation costs, and PTO are fully managed on our end. You pay your flat rate and that's it.</p><span class="vp-inc__foot">All-in pricing</span></div><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 20c0-4 3.58-7 8-7s8 3 8 7"/></svg></span><div class="vp-inc__stat">1:1<small>support</small></div></div><h4>Dedicated account manager</h4><p>A real person oversees the transition, checks in regularly, and ensures quality performance every single day.</p><span class="vp-inc__foot">Real human, no chatbots</span></div><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="9" y1="15" x2="15" y2="15"/></svg></span><div class="vp-inc__stat">0<small>contracts</small></div></div><h4>No long-term contracts</h4><p>Stay as long as you find value. We believe in earning your partnership every single month. Cancel anytime, no penalties.</p><span class="vp-inc__foot">Month-to-month</span></div><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><line x1="19" y1="8" x2="19" y2="14"/>
3238<line x1="22" y1="11" x2="16" y2="11"/></svg></span><div class="vp-inc__stat">∞<small>flexibility</small></div></div><h4>Flexible hiring</h4><p>Scale hours up or down based on your business season. Need part-time? Full-time? Multiple hires? Our model adapts.</p><span class="vp-inc__foot">Scale with demand</span></div><div class="vp-inc__card"><div class="vp-inc__top"><span class="vp-inc__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"/><polyline points="21 3 21 8 16 8"/></svg></span><div class="vp-inc__stat">∞<small>replacements</small></div></div><h4>Lifetime replacement guarantee</h4><p>If your hire ever leaves at any point, for any reason, we find you a new one. <strong>Unlimited times. No expiration.</strong></p><span class="vp-inc__foot">No time cap</span></div></div></div></section>
3238<script>(function () { var io = new IntersectionObserver(function(entries) { entries.forEach(function(e) { if (e.isIntersecting) { e.target.classList.add('is-visible'); io.unobserve(e.target); } }); }, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' }); ['vpIncHead','vpIncGrid'].forEach(function(id) { var el = document.getElementById(id); if (el) io.observe(el); }); })();</script>
3238</div></section><section class="guarantee-banner"><div class="w-embed w-script"><!-- VIRTUSTANT PRICING EMBED 03 PROMISE --><style>.vp-promise{--black:#000000;--white:#FFFFFF;--orange:#FF5A1F;--on-black:rgba(255,255,255,0.75);--on-black-dim:rgba(255,255,255,0.55);--on-black-line:rgba(255,255,255,0.12);--orange-30:rgba(255,90,31,0.30);--font-sans:'Montserrat',sans-serif;--font-italic:'RocaTwo',serif;font-family:var(--font-sans);-webkit-font-smoothing:antialiased;background:var(--black);color:var(--white);padding:100px 24px;position:relative;overflow:hidden;box-sizing:border-box}.vp-promise *,.vp-promise *::before,.vp-promise *::after{box-sizing:border-box;margin:0;padding:0}.vp-promise::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 50% at 20% 50%,rgba(255,90,31,0.08) 0%,transparent 60%),radial-gradient(ellipse 40% 60% at 80% 30%,rgba(255,90,31,0.05) 0%,transparent 60%);pointer-events:none}@media(max-width:768px){.vp-promise{padding:64px 24px}}.vp-promise__inner{max-width:1200px;margin:0 auto;position:relative;z-index:1}.vp-promise__grid{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:center}@media(max-width:900px){.vp-promise__grid{grid-template-columns:1fr;gap:48px}}.vp-promise__left{opacity:0;transform:translateY(20px);transition:opacity 0.8s cubic-bezier(0.2,0.8,0.2,1),transform 0.8s cubic-bezier(0.2,0.8,0.2,1)}.vp-promise__left.is-visible{opacity:1;transform:none}.vp-promise__eyebrow{display:inline-flex;align-items:center;font-size:11px;font-weight:600;letter-spacing:0.16em;text-transform:uppercase;color:var(--orange);margin-bottom:24px}.vp-promise__left h2{font-family:var(--font-sans);font-weight:600;font-size:clamp(2rem,4.4vw,3.4rem);line-height:1.05;letter-spacing:-0.03em;color:var(--white);margin-bottom:22px}.vp-promise__left h2 em{font-family:var(--font-italic);font-style:italic;font-weight:400;color:var(--orange)}.vp-promise__pull{font-family:var(--font-italic);font-style:italic;font-size:22px;line-height:1.3;color:var(--orange);padding-left:18px;border-left:3px solid var(--orange);margin-bottom:20px}.vp-promise__left p{font-size:16.5px;line-height:1.65;color:var(--on-black)}.vp-promise__tl{position:relative;padding-left:52px;opacity:0;transform:translateY(20px);transition:opacity 0.8s cubic-bezier(0.2,0.8,0.2,1) 0.15s,transform 0.8s cubic-bezier(0.2,0.8,0.2,1) 0.15s}.vp-promise__tl.is-visible{opacity:1;transform:none}.vp-promise__tl::before{content:'';position:absolute;left:19px;top:12px;bottom:28px;width:2px;background-image:linear-gradient(to bottom,var(--orange) 50%,transparent 50%);background-size:2px 8px;background-repeat:repeat-y}.vp-tl-row{position:relative;padding:16px 24px 16px 0;margin-bottom:12px;border-radius:14px;transition:background 0.3s ease}.vp-tl-row:last-child{margin-bottom:0}.vp-tl-row::before{content:'';position:absolute;left:-52px;top:24px;width:40px;height:40px;border-radius:50%;background:var(--black);border:1.5px solid var(--orange);z-index:1}.vp-tl-row::after{content:'\2713';position:absolute;left:-52px;top:24px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;color:var(--orange);z-index:2}.vp-tl-row.active::before{background:var(--orange);border-color:var(--orange)}.vp-tl-row.active::after{color:var(--white)}.vp-tl-row:hover{background:rgba(255,255,255,0.04)}.vp-tl-when{font-size:11px;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;color:var(--orange);margin-bottom:4px}.vp-tl-what{font-family:var(--font-sans);font-weight:600;font-size:17px;line-height:1.3;letter-spacing:-0.01em;color:var(--white);margin-bottom:4px}.vp-tl-what em{font-family:var(--font-italic);font-style:italic;font-weight:400;color:var(--orange)}.vp-tl-desc{font-size:13.5px;line-height:1.5;color:var(--on-black)}.vp-tl-arrow{position:relative;display:flex;align-items:center;gap:10px;margin-top:16px;padding-top:8px;font-family:var(--font-sans);font-weight:600;font-size:17px;letter-spacing:-0.01em;color:var(--white);min-height:40px}.vp-tl-arrow em{font-family:var(--font-italic);font-style:italic;font-weight:400;color:var(--orange)}.vp-tl-arrow::before{content:'\2193';position:absolute;
3238left:-52px;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background:var(--orange);color:var(--white);display:flex;align-items:center;justify-content:center;font-style:normal;font-weight:700;font-size:16px;z-index:2}</style><section class="vp-promise"><div class="vp-promise__inner"><div class="vp-promise__grid"><div class="vp-promise__left" id="vpPromiseLeft"><span class="vp-promise__eyebrow">Covered for the life of the hire</span><h2>You're <em>covered</em> as long as you have us.</h2><div class="vp-promise__pull">Most staffing agencies offer 90-day replacement. As if talent only needs to fit for three months.</div><p>We don't play that game. The day your hire leaves, whether that's month 2 or year 3, we re-open the search at zero cost. Same full vetting process, same shortlist quality, same hiring bar. Until you're staffed again.</p></div><div class="vp-promise__tl" id="vpPromiseTl"><div class="vp-tl-row active"><div class="vp-tl-when">Day 1</div><div class="vp-tl-what">Your hire starts.</div><div class="vp-tl-desc">Onboarded, integrated, and working in your timezone.</div></div><div class="vp-tl-row active"><div class="vp-tl-when">Month 6</div><div class="vp-tl-what">Still <em>covered.</em></div><div class="vp-tl-desc">If they leave for any reason, we replace at zero cost.</div></div><div class="vp-tl-row active"><div class="vp-tl-when">Year 3</div><div class="vp-tl-what">Still <em>covered.</em></div><div class="vp-tl-desc">Same guarantee, same process, no questions asked.</div></div><div class="vp-tl-arrow">and beyond. <em>Forever.</em></div></div></div></div></section>
3238<script>(function(){var io=new IntersectionObserver(function(entries){entries.forEach(function(e){if(e.isIntersecting){e.target.classList.add('is-visible');io.unobserve(e.target);}});},{threshold:0.12,rootMargin:'0px 0px -40px 0px'});['vpPromiseLeft','vpPromiseTl'].forEach(function(id){var el=document.getElementById(id);if(el)io.observe(el);});})();</script>
3238</div></section><section class="vt-split-row"><div class="code-embed-35 vt-split-col w-embed"><style>
3239  .vp-hero {
3240    --black: #000000;
3241    --ink: #16161a;
3242    --orange: #ff5a1f;
3243    --dim: rgba(0,0,0,0.60);
3244    --mut: rgba(0,0,0,0.42);
3245    --line: rgba(0,0,0,0.10);
3246    --soft: #f7f7f8;
3247    --font-sans: 'Montserrat', system-ui, sans-serif;
3248    --font-italic: 'RocaTwo', Georgia, serif;
3249
3250    font-family: var(--font-sans);
3251    -webkit-font-smoothing: antialiased;
3252    box-sizing: border-box;
3253  }
3254  .vp-hero *, .vp-hero *::before, .vp-hero *::after { box-sizing: border-box; margin: 0; padding: 0; }
3255
3256  /* Layout (widths, gap, centering) is handled by the Webflow section
3257     .vt-split-row / .vt-split-col — this embed only styles the copy. */
3258
3259  .vp-hero__eyebrow {
3260    display: inline-flex;
3261    align-items: center;
3262    font-size: 11px;
3263    font-weight: 600;
3264    letter-spacing: 0.16em;
3265    text-transform: uppercase;
3266    color: var(--orange);
3267    margin-bottom: 20px;
3268  }
3269  .vp-hero__title {
3270    font-family: var(--font-sans);
3271    font-weight: 600;
3272    font-size: clamp(2.2rem, 3.4vw, 3.2rem);
3273    line-height: 1.08;
3274    letter-spacing: -0.03em;
3275    color: var(--black);
3276    margin-bottom: 20px;
3277  }
3278  .vp-hero__title em {
3279    font-family: var(--font-italic);
3280    font-style: italic;
3281    font-weight: 400;
3282    color: var(--orange);
3283  }
3284  .vp-hero__lede {
3285    font-size: 17px;
3286    line-height: 1.6;
3287    color: var(--dim);
3288    max-width: 520px;
3289    margin-bottom: 28px;
3290  }
3291  .vp-hero__points {
3292    display: grid;
3293    grid-template-columns: 1fr 1fr;
3294    gap: 12px 24px;
3295    max-width: 480px;
3296  }
3297  .vp-hero__point {
3298    display: flex;
3299    align-items: center;
3300    gap: 8px;
3301    font-size: 14px;
3302    font-weight: 600;
3303    color: var(--ink);
3304  }
3305  .vp-hero__point::before {
3306    content: "*";
3307    color: var(--orange);
3308    font-weight: 700;
3309    font-size: 16px;
3310    line-height: 1;
3311  }
3312
3313  @media (max-width: 480px) {
3314    .vp-hero__points { grid-template-columns: 1fr; }
3315  }
3316</style>
3317
3318<section class="vp-hero">
3319  <div class="vp-hero__inner">
3320
3321    <!-- LEFT -->
3322    <div class="vp-hero__copy">
3323      <span class="vp-hero__eyebrow">Empower Your Growth</span>
3324      <h2 class="vp-hero__title">Hire Talent and <em>Save up to 70%</em> vs. U.S. Salaries</h2>
3325      <p class="vp-hero__lede">Book a 30-minute scoping call. No commitment, no setup fees, pay only if you hire. You'll leave with a realistic all-in rate range, a rough timeline, and 2&ndash;3 example profiles.</p>
3326      <div class="vp-hero__points">
3327        <div class="vp-hero__point">Free consultation</div>
3328        <div class="vp-hero__point">No setup fees</div>
3329        <div class="vp-hero__point">Pay only if you hire</div>
3330        <div class="vp-hero__point">All-in rate from $7/hr</div>
3331      </div>
3332    </div>
3333
3334  </div>
3335</section></div><div class="form-block form-pricing w-form"><form id="wf-form-Pricing---Form" name="wf-form-Pricing---Form" data-name="Pricing - Form" method="get" class="form form-title pricing mobile" data-wf-page-id="66f0f6032f9297b2bd2036ba" data-wf-element-id="edfafad5-365a-f9ca-6449-b742812da3cd" data-turnstile-sitekey="0x4AAAAAAAQTptj2So4dx43e"><h2 class="number-section services other-services why-virtu contact-us price">Talk with our sales team</h2><div class="text-block-26">Avg. response time: 4 hours</div><div class="w-layout-hflex flex-block-33"><div class="form-first-name-block"><label for="First-Name-4" class="form_subtext pricing">First Name <span class="text-span-30">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="First-Name-4" data-name="First Name 4" placeholder="First Name" type="text" id="First-Name-4" required=""/></div><div class="form-last-name-block"><label for="Last-Name-4" class="form_subtext pricing">Last Name <span class="text-span-31">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="Last-Name-4" data-name="Last Name 4" placeholder="Last Name" type="text" id="Last-Name-4" required=""/></div></div><div class="w-layout-hflex flex-block-34"><div class="form-email-block"><label for="Email-5" class="form_subtext pricing">Business Email <span class="text-span-29">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="Email-5" data-name="Email 5" placeholder="[email protected]" type="email" id="Email-5" required=""/></div><div class="form-phone_number-block"><label for="Phone-number-2" class="form_subtext pricing">Phone Number <span class="text-span-28">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="Phone-number-2" data-name="Phone Number 2" placeholder="(555) 555-1234" type="tel" id="Phone-number-2" required=""/></div></div><label for="Website" class="form_subtext pricing">
3335Company Website <span class="text-span-27">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="Website" data-name="Website" placeholder="www.your-website.com" type="url" id="Website" required=""/><label for="How" class="form_subtext pricing">How did you hear about us? <span class="text-span-26">*</span></label><input class="text-field pricing-form w-input" maxlength="256" name="How" data-name="How" placeholder="Tell us how you found us!" type="text" id="How" required=""/><div class="recaptcha-wrapper"><div data-sitekey="6LfZs5QrAAAAALsJzXwyPNngUAr6t4pGEmSijJw4" class="w-form-formrecaptcha recaptcha g-recaptcha g-recaptcha-error g-recaptcha-disabled"></div></div><input type="submit" data-wait="Please wait..." class="contact_us-form-btn w-button" value="Book your free consultation"/></form><div class="success-message-2 w-form-done"><div class="code-embed-6 w-embed"><svg width="48" height="48" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
3336<path d="M7.5 12L10.5 15L16.5 9M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z" stroke="#4B9040" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3337</svg></div><div class="contact_us-thank_you-title">Thank you!</div><div class="contact_us-thank_you-text">Your message has been received, and our team will be in touch with you shortly</div></div><div class="w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div></section><section class="section-pricing-hero"></section><section class="section_why-virtustant-pricing"><section class="section-padding pricing-why-virtu"><div class="w-layout-blockcontainer blog-post-text w-container"><div data-w-id="e8f3ed57-6a6b-fcc9-0d76-04aaf10aaccf" style="-webkit-transform:translate3d(0, 20px, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 20px, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 20px, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 20px, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0" class="why-virtustant-container"><div class="f-margin-bottom-128 why-virtustant"><div class="f-title-wrapper-center"><div class="heading-subheading-2 why-virtu">Why virtustant</div><h2 class="number-section services other-services why-virtu">We will <span class="roca-two-streamline">help</span> your company...</h2></div></div><div class="w-layout-grid f-grid-four-columns"><div><div class="f-feature-icon-wrapper pricing-icons"><div class="w-embed"><svg width="81" height="39" viewBox="0 0 81 57" fill="none" xmlns="http://www.w3.org/2000/svg">
3338<rect x="0.00195312" y="25.9151" width="56.8686" height="31.0192" rx="4.22856" fill="#033B54"/>
3339<path d="M63.8041 18.3052C65.2841 18.4212 66.3895 19.7157 66.2721 21.1956L64.4686 43.9409C64.2837 46.2736 61.4119 47.2709 59.821 45.5549L36.94 20.876C35.2771 19.0825 36.6812 16.1807 39.1196 16.3717L63.8041 18.3052Z" fill="#6EEFE0"/>
3340<circle cx="28.4364" cy="40.563" r="7.75481" fill="#F7F9FD"/>
3341<mask id="mask0_1271_3336" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="25" width="57" height="32">
3342<rect x="0.00195312" y="25.9151" width="56.8686" height="31.0192" rx="4.22856" fill="#033B54"/>
3343</mask>
3344<g mask="url(#mask0_1271_3336)">
3345<path d="M63.8041 18.3052C65.2841 18.4212 66.3895 19.7157 66.2721 21.1956L64.4686 43.9409C64.2837 46.2736 61.4119 47.2709 59.821 45.5549L36.94 20.876C35.2771 19.0825 36.6812 16.1807 39.1196 16.3717L63.8041 18.3052Z" fill="#F67331"/>
3346</g>
3347<circle cx="28.4364" cy="40.563" r="7.75481" fill="#F7F9FD"/>
3348</svg></div></div><div class="f-margin-bottom-08"><h3 class="why-virtustant-point-title pricing-option">Save up to 70%</h3></div><p class="why-virtustant-point-text">Unlock un-matched savings by hiring highly skilled remote talent compared to the US market.</p></div><div><div class="f-feature-icon-wrapper pricing-icon"><div class="w-embed"><svg width="45" height="40" viewBox="0 0 45 63" fill="none" xmlns="http://www.w3.org/2000/svg">
3349<circle cx="19.9676" cy="15.0438" r="15.0438" fill="#6EEFE0"/>
3350<path d="M37.2766 63H13.9927C12.8674 63 11.8361 62.3721 11.3196 61.3723L0.671063 40.7623C0.558861 40.5451 0.479607 40.3097 0.453519 40.0666C-0.0273777 35.5865 3.7733 34.1605 7.02046 35.7887C7.18859 35.873 7.34051 35.9865 7.47726 36.1157L12.7724 41.1166C13.2521 41.5697 14.041 41.2296 14.041 40.5698V16.3717C14.041 16.1179 14.0839 15.8597 14.1755 15.6229C16.8761 8.63836 23.6676 11.1188 24.5426 15.8173C24.5636 15.9302 24.5717 16.0459 24.5717 16.1608V32.5234C24.5717 33.4409 25.1272 34.2671 25.9768 34.6132L43.0605 41.5732C44.1038 41.9983 44.6738 43.1278 44.3959 44.2196L40.1924 60.7334C39.853 62.0668 38.6524 63 37.2766 63Z" fill="#033B54"/>
3351<mask id="mask0_1272_3346" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="4" y="0" width="32" height="31">
3352<circle cx="19.9695" cy="15.0438" r="15.0438" fill="#6EEFE0"/>
3353</mask>
3354<g mask="url(#mask0_1272_3346)">
3355<path d="M37.2786 63H13.9946C12.8693 63 11.8381 62.3721 11.3215 61.3723L0.673016 40.7623C0.560814 40.5451 0.48156 40.3097 0.455472 40.0666C-0.0254246 35.5865 3.77526 34.1605 7.02241 35.7887C7.19055 35.873 7.34247 35.9865 7.47921 36.1157L12.7743 41.1166C13.254 41.5697 14.043 41.2296 14.043 40.5698V16.3717C14.043 16.1179 14.0859 15.8597 14.1774 15.6229C16.878 8.63836 23.6696 11.1188 24.5446 15.8173C24.5656 15.9302 24.5736 16.0459 24.5736 16.1608V32.5234C24.5736 33.4409 25.1291 34.2671 25.9788 34.6132L43.0624 41.5732C44.1058 41.9983 44.6758 43.1278 44.3978 44.2196L40.1943 60.7334C39.8549 62.0668 38.6544 63 37.2786 63Z" fill="#F67331"/>
3356</g>
3357</svg></div></div><div class="f-margin-bottom-08"><h3 class="why-virtustant-point-title pricing-option">Hire in days, not weeks</h3></div><p class="why-virtustant-point-text">Shortlist in 48 hours. Start in 72 hours. From your first call, in calendar hours, including weekends.</p></div><div><div class="f-feature-icon-wrapper pricing-icon-2"><div class="w-embed"><svg width="52" height="34" viewBox="0 0 52 52" fill="none" xmlns="http://www.w3.org/2000/svg">
3358<path d="M46.2222 23.1111C46.2222 16.9817 43.7873 11.1033 39.4531 6.76909C35.119 2.43491 29.2406 4.6276e-07 23.1111 0C16.9817 -4.6276e-07 11.1033 2.43491 6.76909 6.76909C2.43492 11.1033 9.25521e-07 16.9817 0 23.1111L23.1111 23.1111H46.2222Z" fill="#033B54"/>
3359<path d="M0 23.1111C-2.65328e-07 26.1461 0.597786 29.1514 1.75923 31.9553C2.92067 34.7593 4.62302 37.3071 6.76909 39.4531C8.91515 41.5992 11.4629 43.3016 14.2669 44.463C17.0708 45.6244 20.0761 46.2222 23.1111 46.2222L23.1111 23.1111L0 23.1111Z" fill="#6EEFE0"/>
3360<path d="M28.8885 52C31.9234 52 34.9287 51.4022 37.7327 50.2408C40.5367 49.0793 43.0844 47.377 45.2305 45.2309C47.3765 43.0848 49.0789 40.5371 50.2403 37.7331C51.4018 34.9292 51.9996 31.9239 51.9996 28.8889L28.8885 28.8889L28.8885 52Z" fill="#F67331"/>
3361</svg></div></div><div class="f-margin-bottom-08"><h3 class="why-virtustant-point-title pricing-option">Delegate and grow</h3></div><p class="why-virtustant-point-text">Tap into untapped talent pools, leveraging the power of delegation to drive business growth.</p></div><div><div class="f-feature-icon-wrapper"><div class="w-embed"><svg width="47" height="39" viewBox="0 0 47 70" fill="none" xmlns="http://www.w3.org/2000/svg">
3362<path d="M23.1115 46.2222C29.241 46.2222 35.1194 43.7873 39.4536 39.4531C43.7877 35.119 46.2227 29.2406 46.2227 23.1111C46.2227 16.9817 43.7877 11.1033 39.4536 6.76909C35.1194 2.43491 29.241 1.83229e-07 23.1115 -1.01022e-06L23.1115 23.1111L23.1115 46.2222Z" fill="#033B54"/>
3363<path d="M0 46.1111C-2.65328e-07 49.1461 0.597786 52.1514 1.75923 54.9553C2.92067 57.7593 4.62302 60.3071 6.76909 62.4531C8.91515 64.5992 11.4629 66.3016 14.2669 67.463C17.0708 68.6244 20.0761 69.2222 23.1111 69.2222L23.1111 46.1111L0 46.1111Z" fill="#6EEFE0"/>
3364<rect y="23" width="23" height="23" fill="#F67331"/>
3365</svg></div></div><div class="f-margin-bottom-08"><h3 class="why-virtustant-point-title pricing-option">Optimize Payments</h3></div><p class="why-virtustant-point-text">Streamline payroll management, handling everything from tax compliance to salary disbursement.</p></div></div></div></div></section></section><section class="np-section np-alt"><div class="np-container"><h2>Published rates: starting all-in cost by role</h2><p>Virtustant rates start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. Your quote depends on the role, experience and agreed schedule. The table below shows starting prices by role. Historical hiring data and its methodology are in our 2026 Nearshore Rate Report.</p><p>The rate is one half of the decision. The other half is who is the employer on paper, who runs payroll and what the replacement guarantee actually covers, which is where an all-in rate and a recruiter&#x27;s fee stop being comparable. That side by side, with the vetting funnel behind every placement, is on how to <a href="/services">hire through a remote staffing agency</a>.</p><div class="vas-table-wrap"><div class="w-embed"><style>
3366.vpr-box{--o:#FF5A1F;font-family:'Montserrat',system-ui,sans-serif;background:#f7f7f8;border:1px solid rgba(0,0,0,.10);border-left:3px solid var(--o);border-radius:12px;padding:20px 22px;margin:26px 0 0}
3367.vpr-box h3{margin:0 0 10px;font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--o)}
3368.vpr-box p{margin:0 0 10px;font-size:14.5px;line-height:1.65;color:rgba(0,0,0,.66)}
3369.vpr-box p:last-child{margin-bottom:0}
3370.vpr-flag{display:inline-block;font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:rgba(0,0,0,.45);background:rgba(0,0,0,.05);border-radius:4px;padding:2px 6px;margin-left:6px;white-space:nowrap}
3371.vpr-total td{font-weight:700;background:rgba(255,90,31,.05)}
3372.vpr-med{font-family:'Montserrat',system-ui,sans-serif;margin:34px 0 0}
3373.vpr-med h3{margin:0 0 8px;font-size:1.25rem;font-weight:700;letter-spacing:-.01em;color:#16161a}
3374.vpr-med p{margin:10px 0 0;font-size:14.5px;line-height:1.65;color:rgba(0,0,0,.66)}
3375.vpr-med .vpr-meta{font-size:13px;color:rgba(0,0,0,.55)}
3376</style><table class="vas-table"><thead><tr><th class="vas-th">Role</th><th class="vas-th">Starting all-in rate</th></tr></thead><tbody><tr><td class="vas-td"><a class="arg-link" href="/roles/appointment-setter">Appointment setter</a></td><td class="vas-td"><strong>From $8/hr all-in</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/social-media-manager">Social media manager</a></td><td class="vas-td"><strong>From $8/hr all-in</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/virtual-assistant">Virtual assistant</a></td><td class="vas-td"><strong>From $7/hr all-in</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/sales-development-representative">Sales development rep (SDR/BDR)</a></td><td class="vas-td"><strong>From $8/hr all-in</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/customer-service-specialist">Customer service representative</a></td><td class="vas-td"><strong>From $7/hr all-in</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/executive-assistant">Executive assistant</a></td><td class="vas-td"><strong>From $8.50/hr all-in</strong></td></tr><tr><td class="vas-td">Legal assistant / paralegal</td><td class="vas-td"><strong>Role-specific quote</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/bookkeeper">
3376Bookkeeper</a></td><td class="vas-td"><strong>From $8.50/hr all-in</strong></td></tr><tr><td class="vas-td">Recruiter</td><td class="vas-td"><strong>Role-specific quote</strong></td></tr><tr><td class="vas-td">Cold caller</td><td class="vas-td"><strong>Role-specific quote</strong></td></tr><tr><td class="vas-td"><a class="arg-link" href="/roles/designer">Graphic designer</a></td><td class="vas-td"><strong>From $8/hr all-in</strong></td></tr><tr><td class="vas-td">Dispatcher</td><td class="vas-td"><strong>Role-specific quote</strong></td></tr><tr><td class="vas-td">Administrative assistant</td><td class="vas-td"><strong>Role-specific quote</strong></td></tr></tbody></table><div class="vpr-box"><h3>How to read these prices</h3><p>These are current starting prices. Your quote depends on the role, experience and agreed schedule. The all-in rate is the total hourly price you pay, with no separate recruitment or placement fee.</p><p>For the independently reconciled January–June 2026 hiring cohort and rate methodology, read our <a class="arg-link" href="/blog/2026-nearshore-rate-report">2026 Nearshore Rate Report</a>. Research medians describe that cohort and are separate from current starting offers.</p><p>How Virtustant makes money: if you pay your agent $10/hr, we give them $9 and keep the dollar in the middle.</p><p>Our <a class="arg-link" href="/blog/virtual-assistant-rates">virtual assistant pricing guide</a> explains pricing models and budget planning. Confirm your scope and hours during the discovery call.</p></div><div class="vpr-med" id="median-rates"><h3>Median client-side rates by role (H1 2026)</h3><p>The table above shows what a new hire starts from today. This table shows the evidence behind it: in Virtustant&#39;s H1 2026 placement data (441 starts, January–June 2026), the median client-side rate for a virtual assistant was $10.10/hr (n=24). Role medians in the cohort range from $9.00/hr (dispat
3376cher) to $12.41/hr (SDR/BDR). There is no single median across all roles.</p><table class="vas-table"><thead><tr><th class="vas-th">Role</th><th class="vas-th">Median client-side rate</th><th class="vas-th">n (placement starts)</th></tr></thead><tbody><tr><td class="vas-td">SDR / BDR</td><td class="vas-td"><strong>$12.41/hr</strong></td><td class="vas-td">32</td></tr><tr><td class="vas-td">Social media manager</td><td class="vas-td"><strong>$12.00/hr</strong></td><td class="vas-td">31</td></tr><tr><td class="vas-td">Executive assistant</td><td class="vas-td"><strong>$12.00/hr</strong></td><td class="vas-td">24</td></tr><tr><td class="vas-td">Virtual assistant</td><td class="vas-td"><strong>$10.10/hr</strong></td><td class="vas-td">24</td></tr><tr><td class="vas-td">Appointment setter</td><td class="vas-td"><strong>$10.73/hr</strong></td><td class="vas-td">22</td></tr><tr><td class="vas-td">Administrative assistant</td><td class="vas-td"><strong>$9.50/hr</strong></td><td class="vas-td">17</td></tr><tr><td class="vas-td">Customer service</td><td class="vas-td"><strong>$10.83/hr</strong></td><td class="vas-td">12</td></tr><tr><td class="vas-td">Dispatcher</td><td class="vas-td"><strong>$9.00/hr</strong></td><td class="vas-td">10</td></tr><tr><td class="vas-td">Customer service representative</td><td class="vas-td"><strong>$9.65/hr</strong></td><td class="vas-td">9<span class="vpr-flag">Small sample</span></td></tr><tr><td class="vas-td">Bookkeeper</td><td class="vas-td"><strong>$12.85/hr</strong></td><td class="vas-td">7<span class="vpr-flag">Small sample</span></td></tr></tbody></table><p><strong>Method.</strong> Cohort: 441 placement starts from January 1 to June 30, 2026 (397 people), from Virtustant&#39;s placement records as read on September 30, 2026. Each figure is a median client-side rate benchmark: expected weekly client revenue divided by expected weekly hours (for SDR/BDR, the explicit client rate). These are benchmarks from placement records, not verified payments. Roles with fewer than 10 starts are marked small sample. Customer service and customer service representative are reported as the separate role titles recorded in placement records. Roles not listed (legal assistant, recruiter, cold caller, graphic designer, developers and others) have no H1 2026 median and are quoted from the starting prices above. Full methodology: <a class="arg-link" href="/blog/2026-nearshore-rate-report">2026 Nearshore Rate Report</a>.</p><p class="vpr-meta">Reviewed by <a class="arg-link" href="/about-us#kevin-wright">Kevin Wright, Co-Founder</a> · Updated <time datetime="2026-10-01">October 1, 2026</time></p></div></div></div><p class="vas-note">Sample size (n) is shown for every role in the median table. Roles with fewer than 10 placement starts are flagged as small sample and reported as they are, not extrapolated. Medians come from Virtustant&#x27;s placement records for January–June 2026 starts, read on 30 September 2026.</p><p>Sources and detail: <a href="/blog/2026-nearshore-rate-report" class="arg-link">2026 Nearshore Rate Report</a> · <a href="/blog/llm-info" class="arg-link">official Virtustant facts</a> · <a href="/virtual-assistant-services" class="arg-link">virtual assistant services</a><span> · </span><a href="/zero-fee-model" class="arg-link">the Zero-Fee Model</a>.</p></div></section><div class="w-embed w-script"><link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700;800&display=swap" rel="stylesheet">
3377<style>
3378.vfaq-sec{background:#fff;padding:80px 0;font-family:'Montserrat',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif}
3379.vfaq-inner{max-width:1140px;margin:0 auto;padding:0 24px}
3380.vfaq2{--o:#FF5A1F;--ink:#16161a;--dim:rgba(0,0,0,.62);--line:rgba(0,0,0,.10);display:grid;grid-template-columns:360px 1fr;gap:56px;align-items:start}
3381.vfaq2 .fq-eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--o);margin:0 0 16px}
3382.vfaq2 .fq-eyebrow::before{content:"";width:24px;height:2px;background:var(--o);display:inline-block}
3383.vfaq2 .fq-title{font-size:clamp(1.7rem,2.6vw,2.4rem);font-weight:700;letter-spacing:-.02em;color:var(--ink);margin:0 0 14px;line-height:1.1}
3384.vfaq2 .fq-title em{font-family:'RocaTwo',Georgia,serif;font-style:italic;font-weight:400;color:var(--o)}
3385.vfaq2 .fq-help{font-size:15px;color:var(--dim);margin:0}
3386.vfaq2 .fq-help a{color:var(--o);font-weight:600;text-decoration:none}
3387.vfaq2 .fq-list{border-top:1px solid var(--line)}
3388.vfaq2 .fq-item{border-bottom:1px solid var(--line)}
3389.vfaq2 .fq-q{display:flex;align-items:center;justify-content:space-between;gap:18px;width:100%;background:none;border:0;cursor:pointer;text-align:left;padding:19px 2px;font-family:inherit;font-size:clamp(1rem,1.25vw,1.1rem);font-weight:600;color:var(--ink);line-height:1.35}
3390.vfaq2 .fq-ic{flex:none;width:15px;height:15px;color:var(--o);transition:transform .25s ease}
3391.vfaq2 .fq-item.open .fq-ic{transform:rotate(180deg)}
3392.vfaq2 .fq-a{max-height:0;overflow:hidden;transition:max-height .3s ease}
3393.vfaq2 .fq-a p{margin:0 2px 20px;color:var(--dim);font-size:15px;line-height:1.65}
3394@media(max-width:860px){.vfaq2{grid-template-columns:1fr;gap:26px}}
3395</style>
3396<section class="vfaq-sec"><div class="vfaq-inner"><div class="vfaq2">
3397<div class="fq-head"><p class="fq-eyebrow">Pricing FAQ</p><h2 class="fq-title">Pricing, <em>answered</em></h2><p class="fq-help">Want a rate for your role? <a href="https://calendly.com/d/cm4v-bxb-7hy/discovery-call-virtustant">Book a free consultation</a>.</p></div>
3398<div class="fq-list">
3399<div class="fq-item"><button class="fq-q" aria-expanded="false">How much does it cost to hire a virtual assistant from Latin America through Virtustant?<svg class="fq-ic" viewB
3399ox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Virtual assistants start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. At the starting price, 160 billed hours equals $1,120. In Virtustant's H1 2026 placement data (441 starts, January–June 2026), the median client-side rate for a virtual assistant was $10.10/hr (n=24), or $1,616 for 160 hours. Your quote depends on the role, experience and agreed schedule.</p></div></div>
3400<div class="fq-item"><button class="fq-q" aria-expanded="false">How much does Virtustant charge for recruitment services?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>There is no recruitment or placement fee. Virtustant rates start at $7/hr all-in. This is the total hourly price you pay, with no separate recruitment or placement fee. Your quote depends on the role, experience and agreed schedule.</p></div></div>
3401<div class="fq-item"><button class="fq-q" aria-expanded="false">How much does a virtual executive assistant cost through Virtustant?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Executive assistants start at $8.50/hr all-in. At that starting price, 160 billed hours equals $1,360. In Virtustant's H1 2026 placement data, the median client-side rate for an executive assistant was $12.00/hr (n=24). Your quote depends on the role, experience and agreed schedule, with no separate recruitment or placement fee.</p></div></div>
3402<div class="fq-item"><button class="fq-q" aria-expanded="false">Is a part-time hire more expensive per hour?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Part-time and full-time hiring use the same all-in hourly pricing model. The quoted rate depends on the role, experience and agreed schedule. We confirm the rate and hours during your discovery call.</p></div></div>
3403<div class="fq-item"><button class="fq-q" aria-expanded="false">How much do staffing agencies charge, and how is Virtustant different?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Agency pricing varies: some charge a placement fee or a percentage of annual compensation. Virtustant charges one quoted all-in hourly rate, with no separate recruitment or placement fee. Compare the same role, schedule, service scope and contract terms.</p></div></div>
3404<div class="fq-item"><button class="fq-q" aria-expanded="false">How long is Virtustant's hiring process?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>You get a shortlist of 3 to 5 vetted candidates within 48 hours of your first call, and your hire can start in 72 hours.</p></div></div>
3405<div class="fq-item"><button class="fq-q" aria-expanded="false">Do you provide ongoing support after the hiring process?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Yes. Each hire gets a dedicated account manager who oversees the transition, runs regular check-ins, and ensures quality. We also handle all payroll, HR and compliance for the lifetime of the engagement.</p></div></div>
3406<div class="fq-item"><button class="fq-q" aria-expanded="false">What's Virtustant's cancellation policy?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Engagements are month-to-month. Cancellation and changes to your engagement follow the terms in your agreement. We confirm the schedule and engagement terms with you during the discovery call.</p></div></div>
3407<div class="fq-item"><button class="fq-q" aria-expanded="false">
3407What kind of services do you offer?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Remote staffing across roles such as virtual assistants, executive assistants, sales reps, marketing specialists, customer service, bookkeepers, designers, developers and project managers, all pre-vetted, bilingual and working in your time zone.</p></div></div>
3408<div class="fq-item"><button class="fq-q" aria-expanded="false">How can I book a free consultation with Virtustant?<svg class="fq-ic" viewBox="0 0 24 24" fill="none"><path d="M6 9l6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button><div class="fq-a"><p>Use the form on the page or click the Book a call button anywhere on the site. The call is 30 minutes, free, with zero obligation.</p></div></div>
3409</div></div></div></section>
3410<script>(function(){document.querySelectorAll('.vfaq-sec .vfaq2 .fq-q').forEach(function(b){b.addEventListener('click',function(){var i=b.parentElement,a=i.querySelector('.fq-a');var o=i.classList.toggle('open');b.setAttribute('aria-expanded',o?'true':'false');a.style.maxHeight=o?(a.scrollHeight+'px'):'0px';});});})();</script>
3410</div><div><div class="w-embed"><style>
3411  .vt-footer { background: #000000; color: #ffffff; padding: 72px 0 32px; font-family: 'Montserrat', sans-serif; }
3412  .vt-footer-container { width: 90%; margin: 0 auto; }
3413  .vt-footer-top { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr 1fr 1fr; gap: 40px; padding-bottom: 40px; border-bottom: 1px solid rgba(255, 255, 255, 0.12); margin-bottom: 24px; }
3414  .vt-footer-logo { display: inline-block; margin-bottom: 14px; }
3415  .vt-footer-logo img { height: 30px; width: auto; display: block; }
3416  .vt-footer-tagline { font-size: 14px; line-height: 1.6; color: rgba(255, 255, 255, 0.55); max-width: 280px; }
3417  .vt-footer-col h6 { font-size: 11px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(255, 255, 255, 0.55); margin-bottom: 14px; margin-top: 0; }
3418  .vt-footer-col h6 a { color: inherit; text-decoration: none; transition: color 0.2s; }
3419  .vt-footer-col h6 a:hover { color: #ff5a1f; }
3420  .vt-footer-col ul { list-style: none; padding: 0; margin: 0; }
3421  .vt-footer-col ul li { margin-bottom: 10px; }
3422  .vt-footer-col ul a,
3423  .vt-footer-col ul span { font-size: 14px; color: rgba(255, 255, 255, 0.75); text-decoration: none; transition: color 0.2s; }
3424  .vt-footer-col ul a:hover { color: #ff5a1f; }
3425  .vt-footer-roles-all { color: #ff5a1f !important; font-weight: 600; }
3426  .vt-footer-bottom { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; font-size: 12px; color: rgba(255, 255, 255, 0.55); letter-spacing: 0.02em; }
3427  .vt-footer-bottom a { color: rgba(255, 255, 255, 0.55); text-decoration: none; transition: color 0.2s; }
3428  .vt-footer-bottom a:hover { color: #ff5a1f; }
3429  @media (max-width: 1100px) {
3430    .vt-footer-top { grid-template-columns: 1fr 1fr 1fr; gap: 32px; }
3431  }
3432  @media (max-width: 900px) {
3433    .vt-footer-top { grid-template-columns: 1fr 1fr; gap: 36px; }
3434  }
3435  @media (max-width: 540px) {
3436    .vt-footer-top { grid-template-columns: 1fr; gap: 28px; }
3437    .vt-footer-bottom { flex-direction: column; gap: 6px; }
3438  }
3439</style>
3440<footer class="vt-footer">
3441  <div class="vt-footer-container">
3442    <div class="vt-footer-top">
3443      <!-- Brand -->
3444      <div class="vt-footer-col">
3445        <a href="/" class="vt-footer-logo">
3446          <img src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/66e66e4f1167498ba9cbb756_logo-horiz-no-bg-white.avif" alt="Virtustant" />
3447        </a>
3448        <p class="vt-footer-tagline">Zero fee remote staffing. Vetted talent from 18 Latin American countries plus South Africa and the Philippines. Lifetime replacement guarantee. Based in St. Petersburg, FL.</p>
3449      </div>
3450      <!-- Product -->
3451      <div class="vt-footer-col">
3452        <h6><a href="/services">Product</a></h6>
3453        <ul>
3454          <li><a href="/services">Services</a></li>
3455          <li><a href="/virtual-assistant-services">Virtual Assistant Services</a></li>
3456          <li><a href="/nearshore-staffing">Nearshore Staffing</a></li>
3457          <li><a href="/hire-in-argentina">Hire in Argentina</a></li>
3458          <li><a href="/about-us">About Us</a></li>
3459          <li><a href="/pricing">Pricing</a></li>
3460          <li><a href="/compare-agencies">Compare agencies</a></li>
3461          <li><a href="/zero-fee-model">The Zero-Fee Model</a></li>
3462          <li><a href="/testimonials">Testimonials</a></li>
3463          <li><a href="/contact-us">Contact Us</a></li>
3464          <li><a href="/blog">Blog</a></li>
3465          <li><a href="/blog/llm-info">About Virtustant (AI reference)</a></li>
3466          <li><a href="/referral">Refer a Business</a></li>
3467        </ul>
3468      </div>
3469      <!-- Roles -->
3470      <div class="vt-footer-col">
3471        <h6><a href="/roles">Roles</a></h6>
3472        <ul>
3473          <li><a href="/roles/virtual-assistant">Virtual Assistants</a></li>
3474          <li><a href="/roles/executive-assistant">Executive Assistants</a></li>
3475          <li><a href="/roles/customer-service-specialist">Customer Service Specialists</a></li>
3476          <li><a href="/roles/sales-development-representative">Sales Reps</a></li>
3477          <li><a href="/roles/bookkeeper">Bookkeepers</a></li>
3478          <li><a href="/roles/marketing-specialist">Marketers</a></li>
3479          <li><a href="/roles/social-media-manager">Social Media Managers</a></li>
3480          <li><a href="/roles/designer">Designers</a></li>
3481          <li><a href="/roles" class="vt-footer-roles-all">All roles →</a></li>
3482        </ul>
3483      </div>
3484      <!-- Countries -->
3485      <div class="vt-footer-col">
3486        <h6><a href="/countries">Hire by Country</a></h6>
3487        <ul>
3488          <li><a href="/hire-in-argentina">Argentina</a></li>
3489          <li><a href="/countries/hire-in-brazil">Brazil</a></li>
3490          <li><a href="/countries/hire-in-south-africa">South Africa</a></li>
3491          <li><a href="/countries/hire-in-mexico">Mexico</a></li>
3492          <li><a href="/countries/hire-in-colombia">Colombia</a></li>
3493          <li><a href="/countries/hire-in-costa-rica">Costa Rica</a></li>
3494          <li><a href="/countries/hire-in-honduras">Honduras</a></li>
3495          <li><a href="/countries/hire-in-ecuador">Ecuador</a></li>
3496          <li><a href="/countries/hire-in-guatemala">Guatemala</a></li>
3497          <li><a href="/countries/hire-in-peru">Peru</a></li>
3498          <li><a href="/countries" class="vt-footer-roles-all">All 20 countries →</a></li>
3499        </ul>
3500      </div>
3501      <!-- Industry -->
3502      <div class="vt-footer-col">
3503        <h6><a href="/industries">Hire by Industry</a></h6>
3504        <ul>
3505          <li><a href="/industries/real-estate">Real Estate</a></li>
3506          <li><a href="/industries/property-management">Property Management</a></li>
3507          <li><a href="/industries/healthcare">Healthcare</a></li>
3508          <li><a href="/industries/legal">Legal</a></li>
3509          <li><a href="/industries/insurance">Insurance</a></li>
3510          <li><a href="/industries/accounting-bookkeeping">Accounting &amp; Bookkeeping</a></li>
3511          <li><a href="/industries/ecommerce">E-commerce</a></li>
3512          <li><a href="/industries/coaching">Coaching</a></li>
3513          <li><a href="/industries" class="vt-footer-roles-all">All industries →</a></li>
3514        </ul>
3515      </div>
3516      <!-- Software -->
3517      <div class="vt-footer-col">
3518        <h6><a href="/softwares">Hire by Software Expertise</a></h6>
3519        <ul>
3520          <li><a href="/softwares/hire-a-quickbooks-assistant">QuickBooks</a></li>
3521          <li><a href="/softwares/hire-a-hubspot-assistant">HubSpot</a></li>
3522          <li><a href="/softwares/hire-a-salesforce-assistant">Salesforce</a></li>
3523          <li><a href="/softwares/hire-a-shopify-assistant">Shopify</a></li>
3524          <li><a href="/softwares/hire-a-xero-assistant">Xero</a></li>
3525          <li><a href="/softwares/hire-a-klaviyo-assistant">Klaviyo</a></li>
3526          <li><a href="/softwares/hire-a-amazon-seller-central-assistant">Amazon Seller Central</a></li>
3527          <li><a href="/softwares/hire-a-go-high-level-assistant">Go High Level</a></li>
3528          <li><a href="/softwares" class="vt-footer-roles-all">
3528All softwares →</a></li>
3529        </ul>
3530      </div>
3531      <!-- Contact -->
3532      <div class="vt-footer-col">
3533        <h6><a href="/contact-us">Contact</a></h6>
3534        <ul>
3535          <li><a href="mailto:[email protected]">[email protected]</a></li>
3536          <li><a href="tel:+17275132583">+1 727 513 2583</a></li>
3537          <li><span>7901 4th St N, Ste 300, St. Petersburg, FL 33702</span></li>
3538        </ul>
3539      </div>
3540    </div>
3541    <div class="vt-footer-bottom">
3542      <div>© 2026 Virtustant · All rights reserved · <a href="/terms-and-conditions">Terms &amp; Conditions</a> · <a href="/privacy-policy">Privacy Policy</a></div>
3543      <div>Zero placement fees · Lifetime replacement guarantee · <a href="https://www.g2.com/products/virtustant/reviews" target="_blank" rel="noopener">4.9/5 on G2 (70 reviews)</a> · <a href="https://www.trustpilot.com/review/virtustant.com" target="_blank" rel="noopener">4.5/5 on Trustpilot (163 reviews)</a></div>
3544    </div>
3545  </div>
3546</footer></div></div>
3546<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=66e37e1f7b0b7a08bf707deb" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
3546<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/js/webflow.schunk.b36de0610a35aa79.js" type="text/javascript" integrity="sha384-bOZ0zosqGRfOla7kqUultK9km3dXI3K5kOn6mDnozBPY/ZGl9/GKllrjZ0EdPONC" crossorigin="anonymous"></script>
3546<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/js/webflow.schunk.452c49d530f9cb2a.js" type="text/javascript" integrity="sha384-8dYLi/MoW8XaXMDsHRl3+KZN/lpOQ18qR3B8M0hl18j3cOmRaicYt2FSAgJaO3PA" crossorigin="anonymous"></script>
3546<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/js/webflow.9cc815b4.684c43e34550506b.js" type="text/javascript" integrity="sha384-n2o58Wsz+SuD4TjPW3QVCmnp3O7ha4+RguhwUVR0OYfHPtt98FCdPdh3/hmLlnHv" crossorigin="anonymous"></script>
3546<script type="text/javascript">
3547  _linkedin_partner_id = '7816193';
3548  window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
3549  window._linkedin_data_partner_ids.push(_linkedin_partner_id);
3550</script>
vendor: 1 bytes, line 3550
3550
3551<script type="text/javascript">
3552  (function (l) {
3553    if (!l) {
3554      window.lintrk = function (a, b) {
3555        window.lintrk.q.push([a, b]);
3556      };
3557      window.lintrk.q = [];
3558    }
3559    var s = document.getElementsByTagName('script')[0];
3560    var b = document.createElement('script');
3561    b.type = 'text/javascript';
3562    b.async = true;
3563    b.src = 'https://snap.licdn.com/li.lms-analytics/insight.min.js';
3564    s.parentNode.insertBefore(b, s);
3565  })(window.lintrk);
3566</script>
3566
3567<noscript>
3568  <img height="1" width="1" style="display: none" alt="" src="https://px.ads.linkedin.com/collect/?pid=7816193&fmt=gif" />
3569</noscript>
vendor: 68 bytes, lines 3569-3570
3569
3570<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3570GTM-TM59XZLC
vendor: 88 bytes, lines 3570-3572
3570" height="0" width="0" style="display: none; visibility: hidden"></iframe></noscript>
3571
3572
3573<!-- ===================================================================== -->
3574<!-- CANONICAL ENTITY NODE - SINGLE SOURCE OF TRUTH                        -->
3575<!-- Organization + ProfessionalService + founders + WebSite.              -->
3576<!-- #organization is defined HERE and ONLY here. Every other page, script -->
3577<!-- and CMS template must reference it as {"@id":"https://www.virtustant  -->
3578<!-- .com/#organization"} and must never redeclare its properties.         -->
3579<!-- RATINGS: this node carries no aggregateRating. The G2-sourced rating  -->
3580<!-- (4.9 across 70 reviews) is declared at PAGE level on / and            -->
3581<!-- /testimonials, deliberately. Google's review-snippet docs say an      -->
3582<!-- entity that controls reviews about itself is ineligible for the star  -->
3583<!-- feature, and aggregateRating is not a supported Organization          -->
3584<!-- property, so this earns no rich result and is not meant to. It is     -->
3585<!-- there for AI engines, which parse JSON-LD generically. Keep it only   -->
3586<!-- while it stays truthful and attributable: cite g2.com as the source   -->
3587<!-- and keep ratingCount in sync with the live G2 number (70 on           -->
3588<!-- 13 Sep 2026). Do not add Review nodes here.                           -->
3589<!-- ===================================================================== -->
3590<script type="application/ld+json">{
3591    "@context": "https://schema.org",
3592    "@graph": [
3593      {
3594        "@type": [
3595          "Organization",
3596          "ProfessionalService"
3597        ],
3598        "@id": "https://www.virtustant.com/#organization",
3599        "name": "Virtustant",
3600        "legalName": "Virtustant LLC",
3601        "url": "https://www.virtustant.com",
3602        "logo": "https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/68ac8e76fe4f3133a322ed44_logo-virtustant-page.png",
3603        "image": "https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/68ac8e76fe4f3133a322ed44_logo-virtustant-page.png",
3604        "priceRange": "From $7 per hour",
3605        "description": "Virtustant is a zero fee remote staffing agency, founded in 2021 in St. Petersburg, Florida, that places vetted talent from 18 Latin American countries plus South Africa and the Philippines with US businesses: virtual assistants, executive assistants, bookkeepers, sales reps, customer service, designers, marketers, and engineers. A shortlist of 3 to 5 vetted candidates within 48 hours of the first call, and the hire can start in 72 hours, in calendar hours including weekends. No placement or recruitment fees and a lifetime replacement guarantee. Rated 4.9/5 on G2 (70 reviews) and 4.5/5 on Trustpilot (163 reviews), with 2,000+ placements since 2021.",
3606        "slogan": "Shortlist in 48 hours. Start in 72 hours.",
3607        "foundingDate": "2021",
3608        "founder": [
3609          {
3610            "@id": "https://www.virtustant.com/about-us#erik-reid"
3611          },
3612          {
3613            "@id": "https://www.virtustant.com/about-us#kevin-wright"
3614          }
3615        ],
3616        "email": "[email protected]",
3617        "telephone": "+1-727-513-2583",
3618        "address": {
3619          "@type": "PostalAddress",
3620          "streetAddress": "7901 4th St N, Ste 300",
3621          "addressLocality": "St. Petersburg",
3622          "addressRegion": "FL",
3623          "postalCode": "33702",
3624          "addressCountry": "US"
3625        },
3626        "contactPoint": [
3627          {
3628            "@type": "ContactPoint",
3629            "telephone": "+1-727-513-2583",
3630            "contactType": "customer service",
3631            "availableLanguage": "en",
3632            "hoursAvailable": {
3633              "@type": "OpeningHoursSpecification",
3634              "dayOfWeek": [
3635                "Monday",
3636                "Tuesday",
3637                "Wednesday",
3638                "Thursday",
3639                "Friday"
3640              ],
3641              "opens": "09:00",
3642              "closes": "18:00"
3643            }
3644          },
3645          {
3646            "@type": "ContactPoint",
3647            "email": "[email protected]",
3648            "contactType": "customer service",
3649            "availableLanguage": "en"
3650          }
3651        ],
3652        "areaServed": "US",
3653        "knowsLanguage": [
3654          "en",
3655          "es"
3656        ],
3657        "knowsAbout": [
3658          "nearshore staffing",
3659          "remote staffing",
3660          "virtual assistants",
3661          "LATAM talent",
3662          "LATAM talent recruitment",
3663          "executive assistants",
3664          "bookkeeping",
3665          "sales support",
3666          "customer service",
3667          "remote hiring",
3668          "talent acquisition",
3669          "HR management"
3670        ],
3671        "sameAs": [
3672          "https://www.linkedin.com/company/virtustant",
3673          "https://www.instagram.com/virtustant_",
3674          "https://www.facebook.com/virtustant",
3675          "https://www.trustpilot.com/review/virtustant.com",
3676          "https://www.g2.com/products/virtustant/reviews",
3677          "https://clutch.co/profile/virtustant",
3678          "https://www.youtube.com/@virtustant",
3679          "https://www.crunchbase.com/organization/virtustant-llc",
3680          "https://www.glassdoor.com/Overview/Working-at-Virtustant-EI_IE9151728.htm",
3681          "https://jobs.virtustant.com/"
3682        ]
3683      },
3684      {
3685        "@type": "Person",
3686        "@id": "https://www.virtustant.com/about-us#erik-reid",
3687        "name": "Erik Reid",
3688        "url": "https://www.virtustant.com/about-us#erik-reid",
3689        "jobTitle": "Co-Founder",
3690        "description": "Co-founder of Virtustant, which he founded in 2021 with Kevin Wright. A former financial analyst who ran an eCommerce business before starting Virtustant.",
3691        "image": "https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/6a6a2a409328a6d17ee62668_erik-320.webp",
3692        "worksFor": {
3693          "@id": "https://www.virtustant.com/#organization"
3694        },
3695        "sameAs": [
3696          "https://www.linkedin.com/in/erik-reid-b0a077126/"
3697        ]
3698      },
3699      {
3700        "@type": "Person",
3701        "@id": "https://www.virtustant.com/about-us#kevin-wright",
3702        "name": "Kevin Wright",
3703        "url": "https://www.virtustant.com/about-us#kevin-wright",
3704        "jobTitle": "Co-Founder",
3705        "description": "Co-founder of Virtustant, which he founded in 2021 with Erik Reid. Before Virtustant he built and ran an international education business, recruiting, training and managing teams across borders. Reviews all content Virtustant publishes.",
3706        "image": "https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/6a6a2a409328a6d17ee62665_kevin-320.webp",
3707        "worksFor": {
3708          "@id": "https://www.virtustant.com/#organization"
3709        },
3710        "sameAs": [
3711          "https://www.linkedin.com/in/kevin-virtustant-intelliscreen-cofounder/"
3712        ]
3713      },
3714      {
3715        "@type": "Person",
3716        "@id": "https://www.virtustant.com/about-us#alan-schultz",
3717        "name": "Alan Schultz",
3718        "url": "https://www.virtustant.com/about-us#alan-schultz",
3719        "jobTitle": "CMO",
3720        "description": "Chief Marketing Officer at Virtustant, leading content, SEO and AI search visibility. Author of the cost and remote-hiring guides on the Virtustant blog.",
3721        "image": "https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb/6850815a0f07d145d8291b9d_image%202.webp",
3722        "worksFor": {
3723          "@id": "https://www.virtustant.com/#organization"
3724        },
3725        "sameAs": [
3726          "https://www.linkedin.com/in/alan-schultz-b0b6ba173/"
3727        ]
3728      },
3729      {
3730        "@type": "WebSite",
3731        "@id": "https://www.virtustant.com/#website",
3732        "url": "https://www.virtustant.com",
3733        "name": "Virtustant",
3734        "publisher": {
3735          "@id": "https://www.virtustant.com/#organization"
3736        },
3737        "inLanguage": "en-US"
3738      }
3739    ]
3740  }</script>
3740
3741
3742<!-- vt-related-inject: internal links on high-intent posts -->
3743<script>(function rel(){try{var p=location.pathname.replace(/\/+$/,'');
3744var T=['/testimonials','Client reviews and video testimonials'];
3745var P=['/pricing','See our transparent pricing'];
3746var S=['/services','How our nearshore staffing works'];
3747var R=['/blog/2026-nearshore-rate-report','The 2026 Nearshore Rate Report'];
3748var C=['/blog/nearshore-virtual-assistant-cost','How much a nearshore virtual assistant costs'];
3749var sets={
3750'/blog/2026-nearshore-rate-report':[P,C,S,T],
3751'/blog/nearshore-virtual-assistant-cost':[R,P,S,T],
3752'/blog/virtustant-vs-near':[T,P,S],
3753'/blog/virtustant-vs-hirelatam':[T,P,S],
3754'/blog/virtustant-vs-somewhere':[T,P,S],
3755'/blog/virtustant-vs-upwork':[T,P,S],
3756'/blog/best-nearshore-virtual-assistant-companies':[T,S,P],
3757'/blog/best-bilingual-virtual-assistant-company':[T,S,P],
3758'/blog/best-staffing-agencies-for-remote-jobs':[T,S,P],
3759'/blog/upwork-alternatives':[T,S,P],
3760'/blog/questions-to-ask-before-hiring-a-staffing-agency':[T,S,P]
3761};
3762var links=sets[p];if(!links)return;if(document.querySelector('.vt-related'))return;var body=document.querySelector('.w-richtext')||document.querySelector('[class*="rich-text"]');if(!body)return;var box=document.createElement('div');box.className='vt-related';box.style.cssText='margin:32px 0 8px;padding:20px 24px;border:1px solid rgba(0,0,0,.1);border-radius:12px;background:#F8F8F8;font-family:Montserrat,sans-serif';var h=document.createElement('div');h.textContent='Related resources';h.style.cssText='font-weight:600;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#FF5A1F;margin-bottom:10px';box.appendChild(h);var ul=document.createElement('ul');ul.style.cssText='margin:0;padding:0;list-style:none';links.forEach(function(l){var li=document.createElement('li');li.style.cssText='margin:7px 0';var a=document.createElement('a');a.href=l[0];a.textContent=l[1];a.style.cssText='color:#232323;text-decoration:underline';li.appendChild(a);ul.appendChild(li);});box.appendChild(ul);body.appendChild(box);}catch(e){}})();</script>
3762
3763<!-- vt: takeaways + tag pills fix -->
3764<style>#vt-tk-src{display:none}.collection-list-2{display:flex;flex-wrap:wrap;gap:8px;width:auto;max-width:100%;align-items:center;height:auto}.collection-list-2 .w-dyn-item{width:auto;height:auto}.blogpost_category-link{width:auto;height:auto;white-space:nowrap}.blog-tag{width:auto;height:auto;white-space:nowrap}</style>
3765<script>document.addEventListener('DOMContentLoaded',function(){var s=document.getElementById('vt-tk-src');var tk=s?s.innerHTML.trim():'';var b=document.querySelector('.vt-takeaways');if(b&&tk&&tk.replace(/<[^>]*>/g,'').trim().length>0){b.style.display='block';b.querySelector('.vt-takeaways-body').innerHTML=tk}});</script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a1db74a5220e9dcae8c311e%2Frevaleadtrack3-0.0.1.js" type="text/javascript"></script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a1f40cc603870dde8d72b83%2Ffinsweettocblogloader-1.0.0.js" type="text/javascript"></script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a28a62750a1a2ffba371b09%2Fvsrfix2-1.0.0.js" type="text/javascript"></script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a2aaf279d5ff6cd8d4dc943%2Fvpregion-1.0.0.js" type="text/javascript"></script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a2f9b8765aee166195cd7d8%2Fogurlinjector-1.0.0-1781549699327.js" type="text/javascript"></script>
3765<script src="https://cdn.prod.website-files.com/66e37e1f7b0b7a08bf707deb%2F689e5ba67671442434f3ca35%2F6a341d6076115edd630e8048%2Fvtmobilefix4-1.0.0.js" type="text/javascript"></script>
3765</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.