Skip to main content
Custom code lets you add your own scripts and styles to the school website: analytics counters, ad pixels, chat widgets, design tweaks. The code is set separately for each school and loads on all its pages.

Where to set it up

Open Control panel → My school → For developers → Custom code (in a corporate school — Control panel → Company → For developers → Custom code). A staff member with the School settings management permission (in a corporate school — Company settings management) can edit the code. Custom code is available on any tariff. The page has two tabs:

How to add code

1

Choose a tab

Switch to HTML or CSS in the top right corner.
2

Paste the code

Paste the code into the editor. The code in each field can be no longer than 3000 characters.
3

Save

Click Save • HTML or Save • CSS at the bottom of the page. The Cancel button brings back the last saved version.
4

Refresh the page

Changes apply after the page is refreshed. Click Refresh in the Changes apply after a refresh notification.
If the code is longer than 3000 characters, the platform does not save it and shows the The code is longer than 3000 characters — shorten it error. Load long scripts as an external file with <script src="...">. If you switch the tab or leave the page with unsaved changes, the platform asks you to confirm.
Custom code runs in every school visitor’s browser with full page permissions. An error in a script can break the school interface. Do not paste code from unverified sources and do not keep secrets in it: any visitor can see API keys, webhook secrets and passwords.

Where the code works

The code loads on all pages of the school website — both on your own domain and on the school’s base address on the platform. Exode mobile and desktop apps open the same school website, so the code loads in them too. Learn more about the apps in Mobile app.

Interface settings

With custom HTML, you can change how some platform elements behave.

Hide video watch progress

Hides the bar of watched segments under the video player in a lesson and the video watch progress in the student card in the management section.
For now, this is the only element you can hide this way.

Hide the “The app is more convenient” banner

Removes the banner suggesting to download the app, which visitors of the mobile website see.

Counters and goal events

Paste the counter or ad pixel code into the HTML tab. The platform sends goal events to it automatically — you do not need to write extra code for goals. In Yandex Metrica and VK Ads, create goals of the “JavaScript event” type with the identifiers from the table.
For goals to reach Yandex Metrica, set the counter number in the window.YM_ID variable after the counter code. For VK Ads, set the pixel number in the window.VK_PIXEL_ID variable. Without these variables, goals are not sent to these systems. Google Analytics and Meta Pixel work right after you paste their standard code.
Example: first paste the counter code from your Metrica account, and right after it — the line with the counter number.
Event sending rules:
  • Purchase is sent once per invoice. Sending it again from the same device is blocked for 90 days. If the successful payment page was opened more than 5 minutes after the payment — for example, from a link in an email or on another device — the event is not sent.
  • The purchase event includes the invoice amount and currency. Google Analytics and Meta Pixel receive a purchase only if the invoice was paid in a real currency. Meta Pixel and Google Analytics also receive the invoice ID — it protects against duplicates.
  • Sign-up is sent only for sign-up by email or phone. For sign-in through social networks, Telegram or a code from a message, the event is not sent: the platform cannot tell a new account from a repeat sign-in.
  • If the user is signed in, the platform passes their ID to Yandex Metrica in the visitor parameters.
  • The Chose a tariff and went to checkout action is not sent if the tariff has an external payment link.
Each event is also dispatched on the page as a browser event — you can catch it with your own script and send it to any other system. The list of browser events and their data is in the developer documentation.

Frequently asked questions

Changes apply only after the page is refreshed. Click Refresh in the notification after saving or reload the page. Keep in mind that students see the changes when they open or refresh the page.
Up to 3000 characters in each field — separately for HTML and for CSS. If that is not enough, move the script to an external file and load it with the <script src="..."> tag.
No. Custom code is available on any tariff. You only need the School settings management permission (in a corporate school — Company settings management).
Check three things: the counter code is pasted into the HTML tab, the window.YM_ID variable with the counter number is set after it, and goals of the “JavaScript event” type with the identifiers from the table above are created in Metrica.
The purchase event is sent only if the buyer saw the successful payment page no later than 5 minutes after the payment. If they closed the page earlier or opened it later, the event is not sent. Check sales against the Sales → Payments section.
Yes. Paste the widget code into the HTML tab. The code loads on all school pages before the app starts.
Open For developers → Custom code, delete or fix the code and save it. Then refresh the page.
No. All school visitors can see custom code. Keep API keys and webhook secrets only on your own server — see API and Webhooks.

Updated: 2026-10-15 18:08 UTC