View Categories

Importing TLD Pricing from eNom

Before you can sell a domain you need a product for each TLD, with a price for each term you want to offer. Creating a hundred of those by hand is not practical, so RackHelm can pull your whole eNom reseller price list and build the products, integrations and billing-cycle prices in one pass. This article is for operators.

Before you start #

  • The edit_integrations permission.
  • A working eNom panel — see Selling domains through eNom. The importer reads pricing with your reseller credentials, so if Test API on the eNom panel does not return OK, the import will not either.
  • A decision about which product group the TLD products should live in.

Note: The bulk price importer exists only for eNom. For the other five registrars, create the TLD products manually under Catalogue → Catalogue & Groups and set their prices on the product’s Pricing tab.

Run the import #

  1. Open Import Data → TLD Importer in the admin sidebar, or go straight to /admin/panels/import/prices.
  2. Set Margin (%). This is added on top of your eNom cost — the default is 10.
  3. Choose a Registration Period (Years): 1, 2, 3, 5 or 10. This is not “the term you sell”, it is “how many terms to create” — the importer builds a price row for every year from 1 up to the number you pick.
  4. Under Product Group, either add to an existing group or choose Create New Group and give it a name.
  5. Press Start Import.
The Import Domain Pricing from Enom form showing margin, years and product group fields
The whole importer is four fields; the years selector decides how many billing cycles get created per TLD.

What the importer actually creates #

For every TLD eNom returns, the importer does four things:

  1. A product named after the TLD with a leading dot — .com, .co.uk — in the chosen group. Existing products with the same name in that group are reused, not duplicated.
  2. A product integration of type enom, bound to your eNom panel, marked active, with the TLD recorded in its config. This is what makes the product a domain product.
  3. Billing cycles for each term: 12 months labelled Annually, 24 Biennially, 36 Triennially, and anything longer as “N Years”. Cycles are matched on their month count, so existing ones are reused.
  4. A price row per product and cycle, carrying three separate figures.

How each price is calculated #

Price Formula
Registration (cost + margin) × years
Renewal (renewal cost + margin) × years
Transfer one year of transfer cost + margin, plus (years − 1) years of renewal price — because a multi-year transfer is one transfer plus renewals
Setup Always 0

Warning: Imported price rows are written with a currency of USD, because that is what eNom quotes. If you sell in pounds, review the prices afterwards — the importer does no currency conversion. It converts nothing and rounds nothing, so figures come out with full decimal precision.

Re-running the import #

The importer is safe to run again: products, cycles, integrations and price rows are all matched and updated rather than duplicated. That makes it the way to push a registrar price change through your catalogue — set the same margin and years, run it, and every existing price row is rewritten from the current eNom cost.

It is equally the way to lose hand-tuned prices. If you have adjusted individual TLD prices by hand, a re-run overwrites them. Note which ones you changed before repeating an import.

After the import #

The importer creates products but does not put them on sale. Before customers can find them:

  • Check the group is visible in the store and that the products are active.
  • Review prices for the TLDs you actually intend to sell, and deactivate the rest — an eNom price list runs to hundreds of extensions.
  • Assign the domain order variables the checkout needs — DomainName, and EppCode if you accept transfers — under Configurable Options on the product’s Options & Add-ons tab.
  • Confirm each product’s Integration Type shows Enom on the product’s Provisioning tab.

Troubleshooting #

Symptom Cause and fix
“Enom returned no pricing data. Please check API credentials.” The pricing call came back empty. Test the eNom panel first; the usual cause is the server’s IP not being allowlisted at eNom.
“Failed to fetch price list: …” A transport or API error. The message is passed through from eNom — an IP or credential problem reads as User not permitted from this IP address.
Validation error on submit Margin must be numeric and at least 0; years must be a whole number between 1 and 10; a new group needs a name, an existing one needs a selection.
Products created with prices of zero eNom returned a cost of zero for those TLDs. The price rows are still written; set the prices by hand or deactivate the products.
Duplicate TLD products appear Products are matched on name and group. Importing the same TLDs into a second group creates a second set. Pick one group and stay with it.
Prices look wrong for multi-year terms Multi-year registration is simply the one-year price multiplied. Where a registry prices a longer term differently, adjust that price row by hand afterwards.