Facebook Marketplace Scraper with Sold Tracker avatar

Facebook Marketplace Scraper with Sold Tracker

Pricing

from $0.38 / 1,000 listings

Go to Apify Store
Facebook Marketplace Scraper with Sold Tracker

Facebook Marketplace Scraper with Sold Tracker

Facebook Marketplace scraper, no login: search by words, city, ZIP or category, browse a city, or paste links. Rows carry price, place, date, photo and seller; add details, vehicle and rental facts, a sold tracker for price drops, a memory for new listings and alerts.

Pricing

from $0.38 / 1,000 listings

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Facebook Marketplace Scraper: Listings, Sold Tracker

Facebook Marketplace scraper without a login: search listings by words, city, postal code or category, browse a whole city, a wide area or every city of a country, or paste Marketplace links, and get one row per listing with its title, price, place, photo, listing date, delivery options and seller name. Add each listing's details (description, every photo, condition, coordinates, vehicle and rental facts) when you need them. A memory gives you only new or changed listings on a schedule, and the sold tracker tells you, run after run, which listings you watch were sold, went pending, were removed or changed their price.

Quick start

  1. Type what you are looking for in Search words (iphone 15, sofa, honda civic), or pick Categories (vehicles, property rentals, electronics, home, free stuff and more), or both.
  2. Add one or more Places: as Facebook names them (Austin, Texas, London, United Kingdom), as coordinates (30.2672,-97.7431), as a postal code (10001, 10115, Germany, M5V, Canada) or as a Marketplace city slug or location id (nyc, 108424279189115). Set a Search area radius up to 500 km to cover a region, or a Country preset to cover every Marketplace city of a country, or paste Marketplace links instead.
  3. Set Listings per search (50 when left out) and any filter: price, listed in the last N days or after a date, pickup or shipping, condition, sold only, vehicle make, transmission, seller, year and mileage.
  4. Run. Download the rows as JSON, CSV or Excel, or read them through the API.

To get only new listings, set a Memory name and schedule the run. To follow listings you already know (your own, a competitor's stock, a car you want), paste their ids or links into Sold tracker and schedule it.

What it does

PathHowWhat you get
Searchwords in places (names, coordinates, postal codes, city slugs, location ids)listing rows in Facebook's order, 11 sort orders
Browsea place or a category without wordsthe place's or category's listings, newest first or a browse order (oldest, farthest, lowest or highest mileage, newest or oldest model year)
Categories17 Marketplace categories, with or without wordseach category is its own search in every place
Vehiclesthe vehicles category, or a make (65 makes), transmission, private or dealer seller, year and mileagevehicle rows; with details make, model, trim, mileage, transmission, fuel, colours, owners, title status, dealer facts
Rentalsthe property rentals categoryrental rows; with details beds and baths, amenities, street, walk and transit scores
Wide areasa search area radius up to 500 km: each place searched at the points of a lattice of overlapping circles (200 km: 19 points)every listing once, wherever two circles overlap
Many citiesa country preset (every city Facebook's own Marketplace directory lists, 117 in the US), or search rows each with its own place and filtersup to 300 searches a run
Linkssearch, category and item links from your browserthe link read with its own filters, yours replace them where set
Monitora memory name on a scheduleonly new listings; optionally changed ones again (UPDATED, previous price) and the unchanged ones free
Sold trackerlisting ids or item links in watchListingsone row per listing and run: available, sold, pending, removed, back to available, price change with the old price, the new price and the difference
Alertsa webhook, Discord, Slack, Telegram or WhatsAppthe run's new (or changed) listings sent after the run, free

What you get

One listing row per Marketplace listing, in Facebook's order. Fill rates measured on 2,009 search rows and 124 detail reads of this Actor's own runs on Apify (2026-10-12):

FieldWhat it holdsFilled
listingId, urlFacebook's listing id (a string) and its link100%
titlethe listing's title100%
price, priceFormattedthe price as a number (0 for free items) and as Facebook writes it ($120, €40)100%
city, state, locationNamewhere the listing is (an item link's row takes them from the details' place text)100%
createdAt, createdAtEpochwhen the listing was created (ISO 8601 UTC, and as Unix seconds)100% of search rows
primaryPhotoUrlthe main photo100%
deliveryTypesIN_PERSON, DOOR_PICKUP, DOOR_DROPOFF, PUBLIC_MEETUP, SHIPPING_ONSITE, SHIPPING_OFFSITE100%
categoryIdFacebook's category id100%
sellerName, sellerIdthe seller as Facebook shows it to logged out visitors91%
strikethroughPricethe earlier price of a reduced listingwhere reduced
subtitleswhat Facebook prints under the title (mileage of a vehicle, the place of a rental)vehicles and rentals
hasVideo, videoIdwhether the listing has a video, and its idwhere it has one
isSold, isPending, isLiveFacebook's status flags100%
queryInTitletrue when every search word is in the titleevery searched row
searchQuery, searchLocation, searchUrl, positionwhich search found the row and its place in the results100%
changeType, previousPrice, isRepost, repostOfIdwith a memory: NEW, UPDATED or UNCHANGED, the price before a change, and a listing posted again by the same seller with the same title under a new idmonitor runs

With Add each listing's details (or an item link), the row also carries:

FieldWhat it holdsFilled
descriptionthe seller's description (as text, HTML or Markdown, cut to a length if you ask)98%
photos, photoCountevery photo of the listing, in order100%
condition, attributesthe condition and the other attributes Facebook shows97%, 92%
currencythe price's currency code100%
categoryName, categorySlugthe category95%
latitude, longitude, distanceKm, withinDistancewhere the listing is, how far from the place you searched, and whether that is within your maximum distance100%
sellerJoinedAt, sellerRating, sellerRatingCountwhen the seller joined Marketplace and their rating95%
sellerPhotoUrl, sellerVerifiedthe seller's profile picture and whether Facebook shows its verified badgewhere Facebook shows them
vehiclemake, model, trim, mileage and unit, transmission, fuel type, colours, number of owners, paid off, seller type, MPG, engine size, title status, features, the dealer's websitevehicles (6 of 6 in these runs had make, model, mileage)
dealershipName, sellerPhone, listingAddress, inventoryCount, listingInventoryTypethe dealer, its phone and address, and its stockwhere Facebook shows them (no dealer listing was shown to logged out visitors in our tests)
videoseach video of the listing: url, hdUrl, thumbnailUrl (with every photo on)listings with a video
propertythe detail lines (beds and baths, amenities), street, walk, bike and transit scores, nearby transitlistings of Facebook's Rentals category (the rentals page mixes general items in: 2 to 4 of 8 rows carried property facts in New York runs)
postalCode, countryCodewhere Facebook shows themvehicles mostly
contactEmails, contactPhonese-mail addresses and phone numbers written in the description (opt in)where written

The sold tracker writes one watch row per watched listing: status (available, sold, pending, removed), previousStatus, change and changes (first_check, sold, pending, removed, available_again, price_changed or unchanged), price, previousPrice, priceChange, priceChangePercent, currency, title, sellerName, locationText, createdAt, firstSeenAt, lastSeenAt and checkedAt.

Every run also writes free rows: a coverage row per search, link or watched listing (the place and coordinates used, the exit country, pages read, listings read, delivered, charged, known to the memory, repeated, filtered out, the stop reason and complete: whether the search was read as far as you asked, with newListingsMayLieBeyond saying whether Facebook had more), status rows for anything that could not be read, and a summary row with every counter.

Example row

{
"type": "listing",
"listingId": "1079632694842846",
"url": "https://www.facebook.com/marketplace/item/1079632694842846/",
"title": "Bicycle",
"price": 35,
"priceFormatted": "$35",
"city": "Edison",
"state": "NJ",
"locationName": "Edison, New Jersey",
"createdAt": "2026-10-12T03:31:06.000Z",
"deliveryTypes": ["IN_PERSON"],
"categoryId": "1658310421102081",
"isSold": false,
"sellerName": "Seller name as shown",
"queryInTitle": true,
"searchQuery": "bicycle",
"searchLocation": "New York, New York",
"position": 1
}

A sold tracker row:

{
"type": "watch",
"listingId": "1841873350160032",
"url": "https://www.facebook.com/marketplace/item/1841873350160032/",
"title": "26 inch bike",
"status": "available",
"previousStatus": "available",
"change": "price_changed",
"price": 250,
"previousPrice": 300,
"priceChange": -50,
"priceChangePercent": -16.67,
"currency": "USD",
"firstSeenAt": "2026-10-12T15:02:11.000Z",
"lastSeenAt": "2026-10-12T15:02:11.000Z",
"checkedAt": "2026-10-13T15:00:40.000Z"
}

How much does it cost to scrape Facebook Marketplace?

You pay per event, with Apify's store discounts:

EventFree planBronzeSilverGold
Listing (per 1,000 listings)$1.00$0.90$0.60$0.38
Listing detail (per 1,000 listings read with details)$2.00$1.80$1.60$1.40
Results page (per 1,000 result pages of 24 to 29 listings)$1.20$1.10$1.05$1.00
Listing check (per 1,000 watched listings checked)$1.50$1.30$1.10$0.90
Actor start (per run)$0.006$0.006$0.006$0.006

Platinum and Diamond plans pay the Gold price. The Actor start has no store discount.

The Store pricing card shows these same prices per 1,000 events: "$1.00 / 1,000" on the Listing row means one listing costs a tenth of a cent on the Free plan.

  • Listing: each listing row delivered for the first time in the run, and for the first time under a memory name. A listing that two searches find is delivered and charged once. With Report changed listings, a known listing whose price or sold or pending state changed is delivered again and charged as a Listing.
  • Listing detail: only when you ask for details (or paste an item link), on top of that listing's charge. A listing whose details could not be read is delivered without them and not charged for them.
  • Results page: each page of search results Facebook answered with listings (24 to 29 a page), new, repeated in the run or already known to the memory. Facebook answers a full page whether you keep 1 listing of it or 24, so this small event pays for the reading itself: a search capped at a few listings, or a monitor that finds little new, still pays its way. On a large search it adds about 4 percent on the Free plan (about 10 percent on Gold) to the listings' price. Empty pages and searches with no result are free.
  • Listing check: each watched listing Facebook answered in the run (available, sold or pending), or that it no longer shows after the memory saw it (removed). One check per listing per run, whatever changed.
  • Free: status rows, coverage rows, the summary, unchanged listings you ask to include, rows the filters drop, notifications, a place Facebook does not know, a link it does not read, a listing it does not show (a watched id the memory never saw that answers no listing), a search with no result, a listing repeated in the run or known to the memory, failed calls.

Examples on the Free plan: 1,000 listings from one search cost about $1.05 (the start, 1,000 listings and 36 result pages in our run); 100 listings with details cost about $0.31 (the start, 100 listings, 100 details and 4 result pages); a monitor of 10 searches that reads one page each and finds 5 new listings costs $0.023 (the start, 10 pages and 5 listings); a daily sold tracker of 100 listings costs $0.156 a run (the start and 100 checks; $0.096 on Gold).

Input

FieldWhat it does
searchQueriesWords to search, one search per line. Every word is searched in every place (and every category).
locationsPlaces as Facebook names them (Austin, Texas), coordinates (30.2672,-97.7431), US ZIP codes (10001), postal codes with their country (10115, Germany, M5V, Canada, SW1A, United Kingdom), Marketplace city slugs (nyc, sanfrancisco) or location ids (108424279189115).
searchRadiusKmA search area radius up to 500 km around each place: above 65 km each place is searched at several points (100 km: 7, 200 km: 19, 300 km: 61, 500 km: 127).
categoriesAny of vehicles, propertyrentals, electronics, home, pets, garden, apparel, entertainment, family, hobbies, classifieds, instruments, sports, toys, free, home-improvements, office-supplies. Without words, the category is browsed.
searchesSearch rows, each with its own place and filters: [{ "query": "sofa", "location": "Austin, Texas", "maxPrice": 300 }, { "location": "nyc", "category": "garden" }].
countryPresetA two letter country code: every city of Facebook's Marketplace directory for that country (up to 300 searches a run).
startUrlsMarketplace links: a search (facebook.com/marketplace/nyc/search?query=bike&maxPrice=300), a category (facebook.com/marketplace/nyc/vehicles) or an item (facebook.com/marketplace/item/123...).
watchListingsSold tracker: listing ids or item links to check on every run (up to 1,000).
sortBynewest (when left out), best_match, price_low, price_high, distance; when browsing without words also oldest, distance_far, mileage_low, mileage_high, year_new, year_old.
minPrice, maxPriceA price range in the currency of the place searched.
daysSinceListedListed in the last 1 to 365 days.
listedAfterListed after a date (2026-10-01), a moment, or a span back from the run's start (24 hours, 7 days).
deliveryMethodall, local_pickup or shipping.
itemConditionAny of new, used_like_new, used_good, used_fair.
availabilityavailable (when left out) or sold: only listings already sold or pending, for price research.
exactMatchFacebook's own stricter word match.
vehicleMake, transmission, vehicleSellerTypeA vehicle make (65 makes), automatic or manual (all clears a link's own), and private or dealer sellers.
minYear, maxYear, minMileage, maxMileageVehicle filters (a search that sets them returns vehicles).
titleMatchOnly, includeKeywords, excludeKeywordsKeep only titles with every search word, or with one of your words; drop titles with others (broken, for parts). Free.
sameCityOnlyDrop, free, listings Facebook places in another city than the one searched.
maxDistanceKm, distanceFilterWith details: mark (withinDistance) or drop, free, listings farther than this from the place searched.
maxListingsPerSearchHow many listings each search reads (50 when left out, up to 1,000).
maxListingsA cap of listing rows for the whole run.
includeDetails, includePhotosRead each delivered listing's details too (the Listing detail event), with or without every photo.
extractContactsWith details: e-mail addresses and phone numbers written in the description.
memoryName, resetMemoryOnly new listings across runs, and a way to start over.
reportChanges, emitUnchanged, stopAtKnownPageWith a memory: deliver changed listings again, include the unchanged ones free, stop a search at the first page the memory knows in full.
descriptionMaxLength, descriptionFormat, compactOutput, excludeEmptyFields, flattenOutputOutput shaping: a cut description, HTML or Markdown, only the core fields, no empty fields, flat rows (vehicleMake, propertyStreet) for spreadsheets.
webhookUrl, webhookHeaders, discordWebhookUrl, slackWebhookUrl, telegramBotToken, telegramChatId, whatsappAccessToken, whatsappPhoneNumberId, whatsappTo, notificationLimit, notifyOnlyChangesAlerts after the run (free). Addresses and tokens are kept secret: they never appear in a row or a log line.
exitCountrySearch every place from an Apify residential exit in this country.

Places. A place name is looked up with Facebook's own location search and used only when one result is written exactly as you wrote it. Austin alone matches Austin in Illinois, Georgia, Texas and Minnesota, so it gets a free status row with Facebook's suggestions (their full names, or for two places of one name each one's coordinates, which this field accepts), and you write Austin, Texas. A postal code is looked up the same way, with Facebook's own country filter, and the place taken is the one that carries the code: five digits alone are a US ZIP code, any other country's code is written with its country (10115, Germany, 2000, Australia; for the United Kingdom and Canada the first part, SW1A, United Kingdom, M5V, Canada, as a full code is asked again by its first part). A city slug (the part after facebook.com/marketplace/) or a numeric location id goes through Facebook's own route. A place whose name ends in one of the countries below (Berlin, Germany), or in a state or province of the United States, Canada, Australia, India, Mexico or Brazil (Mumbai, Maharashtra), or in England, Scotland, Wales or Northern Ireland, is searched from an Apify residential exit in that country, as a local visitor sees it; any other place (Doha, Qatar), coordinates, slugs and links are searched from the United States unless you set exitCountry. Each coverage row names the exit country. The countries: United States, United Kingdom, Canada, Australia, New Zealand, Ireland, Germany, France, Spain, Italy, Portugal, Netherlands, Belgium, Switzerland, Austria, Sweden, Norway, Denmark, Finland, Poland, Czechia (or Czech Republic), Hungary, Romania, Greece, Mexico, Brazil, Argentina, Chile, Colombia, Peru, India, Philippines, Malaysia, Singapore, Indonesia, Thailand, Vietnam, South Africa, Nigeria, Kenya, Israel, United Arab Emirates, Saudi Arabia, Japan, South Korea, Taiwan, Hong Kong, Turkey, Ukraine, Pakistan, Bangladesh, Egypt, Morocco.

Links. A pasted search or category link is read the way Facebook's own site reads it: its place, its words, its category and its filters (price, order, days listed, delivery, condition, vehicle year and mileage, availability). A filter you set in the input replaces the link's own value; a filter you leave out keeps it. A link whose place Facebook does not recognise gets a free status row (Facebook would quietly show listings near the visitor instead). An item link is read in full: one row with its details, charged as a Listing plus a Listing detail.

Browse orders. Oldest first, farthest first, mileage and model year orders are Facebook's browse orders: they work when browsing a place or a category without words (and without filters Facebook's browse ignores: words, make, transmission, condition, delivery, availability, exact match), and a run that combines them gets a clear status row instead of quietly wrong rows.

What Facebook adds to a search. Newest first, Facebook lists the newest listings that carry your words and, once they run out (after 100 to 250 rows in our New York and Chicago runs, about a day of listings), fills up with unrelated new listings. A search with words therefore stops by itself after two result pages in a row in which fewer than one title in ten carries the words (stop reason no_more_title_matches); those two pages are delivered and charged like any other (about 50 rows, mostly unrelated, and their 2 result pages), nothing after them. Best match stays on topic much deeper (at most 6 percent unrelated titles down to 600 rows in our runs): choose it for large searches. Related listings appear in either order (a bike for bicycle), and a word Facebook does not know can return unrelated listings. Every row says queryInTitle; turn on titleMatchOnly or the keyword filters to keep only the titles you want (the others are free and do not count toward the number per search). Facebook also shows different samples of a large search to different visitors, so two runs of one search do not return exactly the same rows.

Monitoring new and changed listings

Set a Memory name and schedule the run (every hour, every 15 minutes). Each run reads each search's newest listings (maxListingsPerSearch, newest first unless you choose another order), delivers and charges only listings the memory has not seen, and pays a Results page event for each page it reads. With Report changed listings, a listing whose price or sold or pending state changed since it was delivered comes again as UPDATED with its previous price; with Include unchanged listings the rest of what the search found comes too, free, as UNCHANGED; Stop at the first page of known listings ends a newest first search once a whole page is known. A listing posted again by the same seller with the same title under a new id is flagged isRepost. The coverage row says newListingsMayLieBeyond when the last page read still held new listings: raise the number per search, or run more often. Pasted search links work in a monitor too: the memory keeps each link's place, so scheduled runs go straight to the link's newest listings. A memory belongs to this Actor; two runs on one memory name at the same time: the second runs free and remembers nothing.

Sold tracker

Paste listing ids or item links into Sold tracker and schedule the run (daily is typical). Each run reads each listing's details (without photos) and compares them with the state the memory kept from the last run (the memory "watchlist" when you set no memory name): available, sold, pending or removed (Facebook no longer shows it), whether that changed (sold, pending, removed, available_again) and whether the price changed (previousPrice, priceChange, priceChangePercent). The first check of a listing says first_check. Facebook sometimes answers "no listing" for a live listing for a moment, so a listing is reported removed only after a second ask from another exit also gets no listing. An id the memory never saw that answers no listing is a free status row, and so is an entry that is not a listing id or link. Set Notify only new and changed with an alert to hear only about the listings that changed.

Alerts

After the run, the run's listings (or, for the sold tracker, its checks) are sent to the targets you set: a JSON POST to your webhook (Make, Zapier, n8n or your own server, with your own headers), a Discord or Slack channel webhook, a Telegram chat through your bot, or WhatsApp through your WhatsApp Cloud API number. Each message names up to notificationLimit listings (10 when left out, at most 50) and always says the total; the full rows stay in the dataset. Alerts are free; a target that refuses the message gets a free status row with its HTTP status only.

Details

Details are read from each listing's own page data, after the listing was found and only for listings that will be delivered. They add the description, every photo, condition and attributes, coordinates, the seller's join date and rating, vehicle facts, dealer facts and property facts. When Facebook stops accepting the reading session this build carries, a run delivers its listings without details (charged as a Listing only), checks no watched listing, and says so in a free status row.

What this Actor does NOT do

  • It never logs in and takes no cookies: no seller profile page, phone number or message history, and the seller's name only where Facebook shows it to logged out visitors (91 percent of rows in our runs). Seller names, ids, descriptions and contacts written in them can be personal data: use them under the rules that apply to you.
  • No radius sent to Facebook: it does not honour one for logged out visitors (2, 65 and 500 km gave the same rows for three searches in our tests) and shows about 65 km around one point. A Search area radius above 65 km is covered with several points instead; maxDistanceKm with details marks or drops listings by their real distance.
  • No property for sale category: Facebook answers it with an error page for logged out visitors (New York, Los Angeles, Chicago, London and Toronto in our tests). Property rentals are covered.
  • No comparable price, price range or parent listing fields: Facebook leaves them empty for logged out visitors (216 of 216 rows in our tests). Videos come as an id (videoId), not a playable file.
  • No e-mail alerts and no export into Notion or other connected apps from inside the run: use the webhook with Make, Zapier or n8n, or Apify's own integrations on the dataset.
  • Dealer listings: Facebook showed logged out visitors no dealer listing in our tests (Houston, Dallas), so dealer sellers can answer nothing and the dealer fields stay empty there.
  • No proxy, concurrency or delay settings: the Actor reads through Apify residential exits at a pace Facebook accepts and chooses fresh exits by itself.
  • Model is a search word (honda civic); make, transmission, year and mileage are filters.
  • Search filters do not apply to item links or watched listings: they are read as named.
  • It does not promise every listing of a large area: Facebook shows each visitor a sample of the search.
  • If Apify restarts a run (a server move, rare), the run goes on where it was and delivers the rest free, as far as its unpaid work allowance reaches (a run with details may stop early then, with a free status row); a search counts what it read before the last save of its progress, so it may read a few listings more or fewer than its number. Run the rest again if you need it.

FAQ

Is there a Facebook Marketplace API?

Facebook offers no public API for reading Marketplace listings. This Actor reads the public, logged out Marketplace the way Facebook's own web app does, and returns the listings as rows you can download or read through Apify's API.

Can I scrape Facebook Marketplace without logging in?

Yes. This Actor needs no Facebook account, no cookies and no password; it reads what Facebook shows to logged out visitors, through Apify residential proxies.

How do I get alerts for new Facebook Marketplace listings?

Set a memory name and schedule the run: each run delivers only listings it has not delivered before under that name. Add a Discord, Slack, Telegram or WhatsApp target, or a webhook, and each run sends its new listings there.

How do I know when a Facebook Marketplace listing is sold?

Put the listing ids or links into the sold tracker and schedule the run. Each run says per listing whether it is available, sold, pending or removed, and whether that or its price changed since the last run.

How do I scrape Facebook Marketplace by location?

Write each place as Facebook names it (Austin, Texas), as coordinates, as a US ZIP code or as a Marketplace city slug, or paste a Marketplace search link from your browser, or set a country preset for every Marketplace city of a country. A place named with one of 53 countries the Actor knows (the list is under Input), or with a state of the United States, Canada, Australia, India, Mexico or Brazil, is searched from an exit in that country; others from the United States; the coverage row names the exit.

Why does this Actor run with limited permissions?

It follows least privilege: it reads and writes only its own storages. The memory for new listings and the sold tracker is a named store the Actor creates itself under your account.

API

curl -X POST "https://api.apify.com/v2/acts/automation_craft~facebook-marketplace-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["bicycle"], "locations": ["New York, New York"], "maxListingsPerSearch": 20}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/facebook-marketplace-scraper').call({ searchQueries: ['sofa'], locations: ['Chicago, Illinois'], maxPrice: 300 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/facebook-marketplace-scraper").call(run_input={"watchListings": ["1841873350160032"], "memoryName": "my watchlist"})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Changelog

See the Changelog tab. 0.2 (2026-10-12): sold tracker, categories, browsing, country presets, ZIP codes and city slugs, sold only, make and transmission, more orders and filters, change reporting, alerts. 0.1 (2026-10-12): first release.

More data tools by Automation Craft