{"id":740,"date":"2025-02-11T08:40:49","date_gmt":"2025-02-11T16:40:49","guid":{"rendered":"https:\/\/embedded.gusto.com\/blog\/?p=740"},"modified":"2025-02-11T08:43:48","modified_gmt":"2025-02-11T16:43:48","slug":"contractor-only-pay-gusto-embedded","status":"publish","type":"post","link":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/","title":{"rendered":"Building Contractor-Only Pay Support for Gusto Embedded"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Why Code Branches are Sometimes the Best Option<\/span><\/h2>\n<p><b>What is \u201ccontractor-only\u201d?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">In the first-party Gusto experience, companies can <\/span><a href=\"https:\/\/gusto.com\/product\/pricing\"><span style=\"font-weight: 400;\">onboard on different \u201ctiers\u201d<\/span><\/a><span style=\"font-weight: 400;\">, each tier offering more and more features. The most basic tier offered is called \u201ccontractor-only\u201d, wherein the company can only onboard and pay contractors, as opposed to contractors <\/span><i><span style=\"font-weight: 400;\">and employees<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This tier is actually quite <\/span><b>relevant to newer companies<\/b><span style=\"font-weight: 400;\"> who might hire only contractors at first, and then employees as their business scales.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>How is the experience different from employee-supporting companies?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Besides the additional features included when a company onboards on an employee-supporting tier, there are some significant differences between the employee-supporting vs. contractor-only <\/span><b>onboarding experiences<\/b><span style=\"font-weight: 400;\">. Specifically, employee-supporting companies require the following onboarding information that contractor-only companies do not:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">State tax setup<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Information \/ setup of at least 1 employee<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pay schedule setup<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Not only are these steps unnecessary for a contractor-only company, but some are <\/span><b>not possible <\/b><span style=\"font-weight: 400;\">to complete. For example, contractor-only companies may not have registered with any state tax agencies since it\u2019s not required of them.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Why do we need to support contractor-only companies?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Since the early days of <\/span><a href=\"https:\/\/embedded.gusto.com\/\"><span style=\"font-weight: 400;\">Gusto Embedded Payroll<\/span><\/a><span style=\"font-weight: 400;\"> (GEP), our partners have wanted the ability to support contractor-only companies on their platforms, but have had to <\/span><b>turn away contractor-only companies <\/b><span style=\"font-weight: 400;\">due to GEP not supporting Gusto\u2019s contractor-only tier. One common use case: accounting and vertical SaaS platforms that are focused on helping newly formed businesses, where their first hires are likely contractors. Supporting those companies was a necessary step in empowering our partners.<\/span><\/p>\n<p><b>Roadblock #1: Front-end validations<\/b><\/p>\n<p><span style=\"font-weight: 400;\">As an embedded payroll offering, we rely on much of the first-party Gusto logic to power our API. There are times, however, where our partners\u2019 needs might differ from first-party\u2019s, and we need to adapt.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">One example that we ran into was the obfuscation of employee-supporting features for contractor-only companies. Most importantly, we wanted to prevent contractor-only companies from running payroll. First-party Gusto handles much of this on the front-end, i.e. if a company is contractor-only, don\u2019t show this \u201cRun payroll\u201d button.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><img decoding=\"async\" class=\"alignnone size-full wp-image-743 lazyload\" data-src=\"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/run-payroll-button-1.png\" alt=\"run payroll option in menu\" width=\"210\" height=\"330\" data-srcset=\"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/run-payroll-button-1.png 210w, https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/run-payroll-button-1-191x300.png 191w, https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/run-payroll-button-1-95x150.png 95w\" data-sizes=\"(max-width: 210px) 100vw, 210px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 210px; --smush-placeholder-aspect-ratio: 210\/330;\" \/><\/td>\n<td><img decoding=\"async\" class=\"alignnone wp-image-744 size-full lazyload\" data-src=\"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/no-run-payroll-button.png\" alt=\"no run payroll option in menu\" width=\"209\" height=\"292\" data-srcset=\"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/no-run-payroll-button.png 209w, https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/no-run-payroll-button-107x150.png 107w\" data-sizes=\"(max-width: 209px) 100vw, 209px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 209px; --smush-placeholder-aspect-ratio: 209\/292;\" \/><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">First-party Gusto <\/span><b>employee-supporting<\/b><span style=\"font-weight: 400;\"> company sidebar, \u201cRun payroll\u201d button present<\/span><\/td>\n<td><span style=\"font-weight: 400;\">First-party Gusto <\/span><b>contractor-only <\/b><span style=\"font-weight: 400;\">company sidebar, \u201cRun payroll\u201d button not present<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Since we cannot utilize such front-end validations, because frontends are handled by each partner, we created a new \u201ccontractor-only\u201d payroll blocker type. By utilizing our <\/span><a href=\"https:\/\/docs.gusto.com\/embedded-payroll\/docs\/payroll-blockers\"><span style=\"font-weight: 400;\">existing payroll blockers infrastructure<\/span><\/a><span style=\"font-weight: 400;\">, we were able to block payroll for contractor-only companies in a clean and simple way.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Roadblock #2: Fast ACH speeds<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Fast ACH is the ability to pay at 1-day or 2-day payment speeds, rather than 4-day. Fast ACH is a feature of Gusto\u2019s employee-supporting tiers, but not its contractor-only tier. For Gusto Embedded, Fast ACH is a necessity for our partners, regardless of company tier.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The data modeling responsible for first-party Gusto\u2019s contractor-only tier not including Fast ACH is the same data modeling used for \u201ccontractor-only\u201d logic throughout the app, and was not something we could simply discard. We looked into the following three solutions:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Convince the owning team to enable Fast ACH for first-party Gusto contractor-only.<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Not doable: they wanted to preserve the existing tier\/feature structure.<\/span><\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Change the data modeling to enable Fast ACH for GEP contractor-only \u2192<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Not doable: this likely would\u2019ve resulted in unintended downstream effects.<\/span><\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Create a custom codepath to enable Fast ACH for GEP contractor-only\u00a0<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Doable: this was our selected solution!<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Though branching codepaths are generally less maintainable, sometimes they\u2019re the right decision. In order to minimize downstream effects, it was the right solution in this case.<\/span><\/p>\n<p><b>Project completion<\/b><\/p>\n<p><span style=\"font-weight: 400;\">After working through implementation, writing tests, staging test fests, iterating, and writing documentation, we were finally able to release GEP contractor-only! This included API changes, like the ability to create and update a contractor-only company, as well as UI changes in our Flows, like the difference in the onboarding experience for contractor-only companies. This was a big win for us, since it unblocked a large number of companies from joining our platform.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why Code Branches are Sometimes the Best Option What is \u201ccontractor-only\u201d? In the first-party Gusto experience, companies can onboard on&#8230;<\/p>\n","protected":false},"author":26,"featured_media":741,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-740","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developer-perspective"],"acf":{"exclude_from_embedded_resources":false,"popularity":0,"essentiality":0},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Contractor-Only Pay Support for Gusto Embedded - Embedded Blog<\/title>\n<meta name=\"description\" content=\"How the Gusto Embedded engineering team built support for contractor-only businesses looking to pay their teams.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Contractor-Only Pay Support for Gusto Embedded - Embedded Blog\" \/>\n<meta property=\"og:description\" content=\"How the Gusto Embedded engineering team built support for contractor-only businesses looking to pay their teams.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/\" \/>\n<meta property=\"og:site_name\" content=\"Embedded Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-11T16:40:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-11T16:43:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kayla Buki\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kayla Buki\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Contractor-Only Pay Support for Gusto Embedded - Embedded Blog","description":"How the Gusto Embedded engineering team built support for contractor-only businesses looking to pay their teams.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/","og_locale":"en_US","og_type":"article","og_title":"Building Contractor-Only Pay Support for Gusto Embedded - Embedded Blog","og_description":"How the Gusto Embedded engineering team built support for contractor-only businesses looking to pay their teams.","og_url":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/","og_site_name":"Embedded Blog","article_published_time":"2025-02-11T16:40:49+00:00","article_modified_time":"2025-02-11T16:43:48+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png","type":"image\/png"}],"author":"Kayla Buki","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kayla Buki","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#article","isPartOf":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/"},"author":{"name":"Kayla Buki","@id":"https:\/\/embedded.gusto.com\/blog\/#\/schema\/person\/1359ff4c97832591d9b81c9ed72a9043"},"headline":"Building Contractor-Only Pay Support for Gusto Embedded","datePublished":"2025-02-11T16:40:49+00:00","dateModified":"2025-02-11T16:43:48+00:00","mainEntityOfPage":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/"},"wordCount":667,"image":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#primaryimage"},"thumbnailUrl":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png","articleSection":["Developer Perspective"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/","url":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/","name":"Building Contractor-Only Pay Support for Gusto Embedded - Embedded Blog","isPartOf":{"@id":"https:\/\/embedded.gusto.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#primaryimage"},"image":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#primaryimage"},"thumbnailUrl":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png","datePublished":"2025-02-11T16:40:49+00:00","dateModified":"2025-02-11T16:43:48+00:00","author":{"@id":"https:\/\/embedded.gusto.com\/blog\/#\/schema\/person\/1359ff4c97832591d9b81c9ed72a9043"},"description":"How the Gusto Embedded engineering team built support for contractor-only businesses looking to pay their teams.","breadcrumb":{"@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#primaryimage","url":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png","contentUrl":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly.png","width":1920,"height":1080,"caption":"Building Contractor-Support in Gusto Embedded"},{"@type":"BreadcrumbList","@id":"https:\/\/embedded.gusto.com\/blog\/contractor-only-pay-gusto-embedded\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/embedded.gusto.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Contractor-Only Pay Support for Gusto Embedded"}]},{"@type":"WebSite","@id":"https:\/\/embedded.gusto.com\/blog\/#website","url":"https:\/\/embedded.gusto.com\/blog\/","name":"Embedded Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/embedded.gusto.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/embedded.gusto.com\/blog\/#\/schema\/person\/1359ff4c97832591d9b81c9ed72a9043","name":"Kayla Buki","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/kayla-buki-150x150.png","url":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/kayla-buki-150x150.png","contentUrl":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/kayla-buki-150x150.png","caption":"Kayla Buki"},"description":"Kayla is a software engineer on the Gusto Embedded Payroll team, where she focuses on building APIs to power embedded payroll for partners. Previously, Kayla interned on Gusto's Design Systems team.","url":"https:\/\/embedded.gusto.com\/blog\/author\/kayla-buki\/"}]}},"images":{"large":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/EMB-devblog-hero-contractoronly-1120x630.png"},"authorDetails":{"id":26,"name":"Kayla Buki","avatar":"https:\/\/embeddedblog.wpengine.com\/wp-content\/uploads\/2025\/02\/kayla-buki-150x150.png"},"_links":{"self":[{"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/posts\/740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/comments?post=740"}],"version-history":[{"count":0,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/posts\/740\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/media\/741"}],"wp:attachment":[{"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/media?parent=740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/categories?post=740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded.gusto.com\/blog\/wp-json\/wp\/v2\/tags?post=740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}