A lot of good directories start in Airtable. It is quick, it is free to begin with, and a base with a few hundred rows feels like a directory already. You add a shared view or wrap it in a no-code front end, post the link, and people use it.
Then you look at search traffic and there is almost none. People search for “vegan bakeries in Leeds” or “accessible climbing gyms near me”, and your carefully kept list never appears, even though it has exactly the answer.
This guide explains why that happens, and how to move the directory to your own WordPress site with Listora so that every row in the base becomes a page Google can find. The core of it runs on the free plugin.
Why a directory in Airtable stays invisible
A search engine ranks pages. A directory earns search traffic when each business, venue or service has a page of its own, with a clear title, a readable address and details that match what people type.
A shared Airtable view does not give you that. It is one page at best, and the rows inside it are loaded by a script rather than published as separate addresses. An embedded view on your website is the same view in a frame, so the listings still live on Airtable’s side, not yours. No-code front ends vary, and some do publish a page per record, but many still render the list in the browser, sit on a subdomain you do not control, or put the best pages behind a paid plan.
Even when a page per record exists, the details that help a listing rank are usually missing:
- A stable address on your domain. Links people share build up your site, not someone else’s.
- Structured data. Search engines read a business’s name, address, coordinates, opening hours and rating from schema markup, and that is what produces rich results.
- A sitemap. A file that lists every listing so new ones are found without waiting for a crawler to stumble on them.
- Category and location pages. “Bakeries” and “Leeds” pages that collect the right listings and link to them.
None of this is a criticism of Airtable. It is a database, and a good one. A directory that wants search traffic needs to be a website as well.
What you get after the move
Once the rows are Listora listings, each one is a WordPress post with its own page on your domain, under a listing slug you choose in the settings.
Each listing page carries Schema.org data that matches its listing type. A restaurant type outputs Restaurant markup, a hotel type Hotel, a property type RealEstateListing, and general businesses LocalBusiness, with the address, map coordinates, opening hours and review rating included when the listing has them.
Listings are added to the WordPress XML sitemap. That is on by default in the free plugin, under the Sitemap feature, so a listing is in the sitemap the moment it is published. Categories and locations are public archives, so “Bakeries” and “Leeds” each get a page of their own. Expired listings send a noindex header, so stale entries do not linger in search results.
If you want pages for every combination, such as “bakeries in Leeds” or “gyms in Bristol”, Listora Pro builds them from your listings with programmatic SEO pages. That is an extra, not something you need for the move.
Before you export: tidy the base
The import is only as good as the CSV. Twenty minutes in Airtable saves an afternoon of fixing listings one by one.
Decide on the listing type
In Listora, every listing belongs to a listing type, such as Business, Restaurant or Hotel, and the type decides which fields a listing has. Look at your Airtable columns and pick the type that fits best. If your data has fields no built-in type has, add them to the type in Listora first, so they are there to map to. See listing types for how types and fields work.
If the base mixes very different things, such as cafes and coworking spaces, split it into one view per type and import each view separately.
Map your columns in advance
The free importer can map these to a column:
- Title, the listing name. A row with no title has nothing to import.
- Description, the main text.
- Category, one category per row. A category that does not exist yet is created.
- Tags, separated by commas.
- Location, as text, such as a town or a neighbourhood.
- Featured Image URL, one image link, which Listora downloads.
- Any field of the listing type, such as phone, website, email, price range or anything you added.
Anything else can be skipped. Write the mapping down as a two-column list before you export. It makes the import step quick and shows you which Airtable columns have no home yet.
If you plan to import with WP-CLI, rename the Airtable columns to match the Listora field names, such as “Title” and “Description”. The command matches columns by name and skips any it does not recognise.
Clean the values
A few things trip up most Airtable imports:
- Multiple categories in one cell. Listora takes one category per row on import. Pick the main one in Airtable, or use a formula column that takes the first value. Put the rest in Tags.
- Linked records. A linked-record column exports as the linked records’ names, which is usually what you want for a category or a location. Check a few rows to be sure.
- Checkbox and single-select fields. These export as text. Make sure the text matches the options of the Listora field you map them to.
- Long text with formatting. Airtable’s rich text exports as Markdown-style text. It imports as plain text, so read a couple of descriptions afterwards.
- Opening hours. Hours have their own format in Listora. Add them after the import, or leave them for owners to fill in once they claim their listing.
Deal with photos
This is the step most people miss. Airtable exports an attachment column with the file name and its link together in one cell, and those links are temporary. Airtable’s own help pages say attachment links in a CSV export expire after a few hours (Airtable support, checked 27 Oct 2026).
So, for the featured image:
- Export, then clean the attachment column straight away so each cell holds just one link. In a spreadsheet, keep the text between the brackets of the first attachment.
- Run the import the same day, ideally within the hour. Listora downloads each image as it imports the row, and after that the image lives in your own media library.
- If a few images fail because a link expired, export again and import just those rows, or add the images by hand.
Only one image per listing comes across this way. Add gallery photos afterwards, or let owners upload them once they claim the listing.
Export from Airtable
Open the base, go to the grid view that holds the records you want, and download it as CSV from the view’s menu. The export includes only the records and fields visible in that view, so check the filters, show every column you mapped, and hide the ones you do not need.
Make one view per listing type if you split the data. Name the files clearly, such as cafes.csv and coworking.csv.
Import into Listora
Download Listora, upload it under Plugins, Add New (installation steps), run the setup wizard and create the directory page. Then:
- Go to Listora, Settings, Import / Export.
- In Import Listings, pick the Listing type for this file.
- Choose the CSV file. The first row must hold the column headers, which is how Airtable exports it.
- Match each column to a Listora field, or skip it, using the list you wrote earlier.
- Click Import CSV.
Small files finish straight away. Larger ones run in the background in batches of a few dozen rows, and a progress bar shows how many listings are in. You can close the tab and come back. If a batch fails, Listora tries it again, and every row is fingerprinted, so a retry never creates a second copy of a listing. The search index rebuilds itself when the last batch is done.
Start with a test file of ten rows. Open three or four of the listings on the front end and check the title, the description, the category, the photo and the custom fields. Fix the mapping or the data, delete the test listings, then import the full file.
For a big base, or a server with a short time limit, use WP-CLI instead:
wp listora import cafes.csv --type=cafe --dry-run # shows how each column maps
wp listora import cafes.csv --type=cafe
The dry run lists every column and the field it matched, so you can see which ones would be skipped before anything is written.
With Listora Pro
Pro replaces the CSV card with Visual Import, which helps when you import more than once or the data is messy. You match columns on screen and can save the mapping as a template. A preview counts valid rows, warnings and errors before anything is written. Update existing listings matches rows to listings by title instead of creating duplicates, you can set a default status such as pending, and at the end you can download a report of the rows that failed. The Visual Import docs walk through each step.
After the import
The import gets the data in. A few jobs turn it into a directory people trust.
Check the pages search engines will see
Open a handful of listing pages and view them the way a visitor would. Each should have a clear title, a description longer than a line or two, the right category and a photo. Thin listings with only a name and a phone number are the ones that never rank, so fill in the most popular ones first.
Check that your sitemap lists the listings, then submit the sitemap in Google Search Console if the site is new. It is the quickest way to get new pages found.
Point the old links at the new pages
If your Airtable view or no-code site was public, people and other sites have linked to it. Replace the link wherever you control it: your social profiles, newsletters, partner pages. If the old front end ran on a domain you own, set up 301 redirects from the old record addresses to the new listing pages, so the links you have earned carry over.
Hand listings to their owners
A list you kept by hand has no owners. In Listora, every listing you added shows a Claim button, and the business owner can prove ownership and take it over, then edit it from their own dashboard. This is free. Email the businesses you listed with a link to their new page. Owners who claim keep their hours, photos and details current, which is the part a spreadsheet never solved. The post on keeping directory listings fresh covers claims, reports and expiry in detail.
Open the directory to new submissions
In Airtable you probably took submissions through a form and copied them in. Listora has a front-end submission form where signed-in members add a listing themselves, and you approve it from a moderation queue. Turn it on once the imported listings look right. The duplicate check warns a submitter when their business already looks listed and offers to send them into the claim flow instead.
Keep a spreadsheet copy if you want one
Some owners like to keep Airtable as the master and push changes to the site. It works for a while, but it fights against everything the move was for. Owners edit their listings on the site, visitors leave reviews, and a re-import from Airtable either creates duplicates or overwrites real updates.
A cleaner rule is to move once and let the directory be the master. When you want the data in a spreadsheet, for a report, a mailing or a backup, export from Listora as CSV, filtered by listing type if you like. The file has the core fields, the custom fields and the coordinates, and you can load it back into Airtable for analysis without it ever becoming the source again.
What this does not do
So that nothing surprises you on the day:
- No direct Airtable connection. The CSV file is the bridge. There is no live sync.
- One image per listing on import. Gallery photos are added afterwards.
- One category per row. Extra categories go in as tags or are added later.
- No automatic redirects from Airtable. Old shared-view links cannot be redirected, because they are on Airtable’s domain.
- Hours are not mapped. Add them after the import or let owners do it.
What it costs
The import, the listing pages, the schema markup, the sitemap, category and location pages, claims, front-end submission and the CSV export are all in the free plugin, with no listing cap. Pro adds Visual Import, Google Places import and programmatic SEO pages, along with paid plans and verified badges for when the directory starts earning. The Free vs Pro page has the full list.
A directory in a spreadsheet is a list. The same data on your own site, with a page for every listing, is something search engines can send people to. The move is an afternoon’s work for most bases, and most of that afternoon is tidying the data you already have.