Skip to content

Candidate acquisition

Adding the Application Form to Your Own Site

Your corporate site already has a career page, and candidates email a CV to an address from there. The embed widget places the application form inside that page without redesigning it: the candidate fills it in without leaving your site, and the record lands in the panel. What you add to the page is two lines of code.

Quick answer

The embed widget is how the job application form goes into a company own site. You add a container div and a hosted loader script to the page; the script builds the frame and keeps its height in step with the content. The candidate never leaves your site and the application lands straight in the panel. The code comes in HTML, PHP, JavaScript and React. The search engine surface is a separate one: the page inside the frame is marked noindex.

Application form embedded in the career page of a company own site: the site menu on top, the shell free form underneath

Setup: two lines of code, four formats

Setup is two lines: a container div where the form should appear, and our hosted loader script on the page. The div does not create the frame, the script does. The loader scans every container div on the page and places a frame in each one, so several postings can live on the same page.

The code comes in four formats, because not every site is raw HTML: HTML, PHP, JavaScript and React/Next. All four build the same frame; the only thing that changes is how the div is created. You pick the posting in the panel, the code is generated with that posting address, and you copy it.

Because the loader is served from our domain, its behavior can be fixed later without you ever touching the code on your site again. Which loader version a page is running can be read from the browser console.

Attributes of the container div
AttributeRequiredWhat it does
data-companyRequiredSays which company the posting belongs to
data-jobRequiredSays which posting opens; if the posting is not live, the frame shows a 404
data-mode="form"OptionalSkips the posting detail and opens the application form directly
data-titleOptionalThe frame title, read by screen readers. Left out, the default title applies
data-accentOptionalThe primary button color. Hex only, for example #1e5aa8
data-localeOptionalThe form language. Takes "tr" or "en"; left out, the form opens in Turkish

The bridge between the frame and your page

An iframe is normally a fixed box, and content that does not fit produces its own scrollbar. Not here: the page inside the frame measures its own content box and reports the height outward, and the loader writes it onto the frame. No inner scrollbar appears.

The measurement deliberately runs on the content box rather than on the root element of the page. Because the root element is floored at the frame own height, the frame could grow but never shrink; when a long form gave way to a short confirmation screen, empty space would be left underneath.

There are two more bridges. As your page scrolls, the region actually visible on screen is streamed into the frame, so a dialog inside the form centers on what the user sees rather than on the middle of the page. When an application is submitted, the frame asks the page to scroll; the loader waits a moment so it does not race the height update, then verifies the target once more.

  • Every message between the page and the frame is locked to a single origin, and a message from any other origin is dropped unprocessed
  • The background arrives transparent and there is no shell: no menu bar, no footer, no background of its own
  • Snippets installed with the old address keep working, the loader maps the old address to the canonical one

The search engine side: what an embedded form does and does not do

The page inside the frame is marked noindex and nofollow and is absent from the sitemap. The concrete consequence: an embedded form creates no new page on your site and your posting text is not indexed on your domain. We write that plainly, because expecting the opposite leads to a wrong setup decision.

Getting a posting into search results is solved by a separate surface: the career page. There, a posting that is Active and whose body passes 300 characters is indexed, enters the sitemap posting by posting and is published together with job posting structured data.

Both can be on at once. A company that wants the embed only switches the career page setting off; every public career URL then returns 404 while the embedded form and the application endpoint keep working.

Installation health in the panel

Every time the frame loads, a health record is written. Your page address is read from the top frame information the browser provides, or from the referrer; the address header of the request itself points at our domain, so looking there would be useless.

The record is one row per company: last load time, the domain where the form was last opened, the slug of the last posting opened and the total load count. This is runtime health, not configuration; it produces no per posting or per site report.

Two metrics sit at the top of the card. "Site where the form opened" comes straight from this record. "Applications in the last 30 days", on the other hand, counts every job application of the company, not only the ones from the embedded form; keep that in mind while reading the number.

The four states on the health card
StateWhat it meansNext step
OffThe embed switch in the panel is offThe switch is a panel setting; to remove the frame from your site, take the code off the page
Setup incompleteThe allowed origin list is emptyAdd your site address to the list, and the panel counts the setup as verified
ReadyThe code is ready, the frame has never loadedPaste the code into the page and open the page once
LiveThe frame has loaded at least onceThe last load time and the last domain are written on the card

An embedded application runs on the same line

The embedded page uses the same data path as the career page. The form posts to the same endpoint, the candidate gets the confirmation email, the CV analysis runs in the background and the result sits on top of the application in the panel. The only thing that changes is the shell.

Security is identical too: bot verification is mandatory on the embedded form, an unverified application is rejected, and the endpoints sit under a 30 requests per minute rate limit. No data is stored on your site, the application goes straight to GoTeam; the privacy notice and the explicit consent both live inside the form.

The decision mechanism does not change either. AI produces rankings and suggestions and never changes the status of an application on its own; HR decides.

  • Only a live posting can be embedded; the slug of a draft or closed posting returns 404 inside the frame
  • How many postings you can keep open at once depends on your plan, and publishing one spends a slot
  • The code sits both on the settings screen and in the "Add to your site" section of the posting detail
  • Viewing and changing embed settings requires the company settings permission
  • There is a printable setup guide written for your company: seven steps, screenshots and a PDF output

Where people usually get stuck

Almost every setup problem falls under five headings. The troubleshooting section of the setup guide follows the same order.

One warning concerns an obstacle that is not on our side: if the security headers of your own site restrict framing, the form will not open. We place no framing restriction on the embed address and the reasoning is written in the code, but the headers of your site have to allow it.

  • Pasting only the div or only the script: the two travel together, neither builds a frame on its own
  • Leaving the posting slug placeholder in the code: when no active posting exists in the panel, the generated code keeps the placeholder, so replace it with your own posting slug
  • Using the slug of a draft posting: the frame shows "posting not found", so publish the posting first
  • Putting anything other than hex into data-accent: "rgb(...)", "blue" or a CSS variable is dropped silently and the default color stays
  • Writing an incomplete address: add your domain to the allowed origin list with its scheme, it is normalized while saving and the list holds at most 20 addresses

Frequently asked questions

Yes. Open a Custom HTML block on the page where the form should appear and paste the div and the script line together. If you would rather write it into a template file, the PHP format gives you the same code. The only condition is that the security headers of your site allow framing.

The form arrives without a shell: no menu bar, no footer, no background of its own, and the ground stays transparent, so the color of your page shows through. You can pull the primary button color to your own with the data-accent attribute, hex values only. Typeface and general typography belong to the form design.

It is not fixed. The page inside the frame measures its own content box and reports the height outward, and the loader resizes the frame to match. No inner scrollbar appears. Because the measurement runs on the content box, the frame does not only grow: it shrinks too when a long form gives way to a short confirmation screen.

For verifying the installation. The panel shows whether the domain where the form was last opened is on the list; the "Setup incomplete" warning appears while the list is empty. Addresses are lowercased and normalized to scheme and domain form while saving, and the list holds at most 20 addresses.

Yes, the loader scans every container div on the page and builds a separate frame for each. The limit is not on the code side but on the posting side: only a live posting can be embedded, and how many postings you can keep open at once depends on your plan.

The application enters the same line as one from the career page: the CV analysis runs in the background and the result sits on top of the application in the panel. But AI never changes the status of an application on its own. It produces rankings and suggestions, and HR decides.

See this feature on your own data

Leave a demo request, we set it up together and walk through the process on one of your own positions.

Contact Us