# Short Term Rental Regulations: South Carolina (Airbnb, VRBO) (`keelandcharter/sc-short-term-rental-rules`) Actor

Short term rental rules for 12 coastal South Carolina towns as clean data: permit, fees, caps and waitlists, owner occupancy, occupancy limits, parking, taxes and recent changes, with official source links and a last checked date on every record. Charleston, Folly Beach, Myrtle Beach and more.

- **URL**: https://apify.com/keelandcharter/sc-short-term-rental-rules.md
- **Developed by:** [Keel & Charter](https://apify.com/keelandcharter) (community)
- **Categories:** Real estate, Travel, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 jurisdiction records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## South Carolina Short Term Rental Rules

Know the rules before you buy, list or manage a short term rental on the South Carolina coast. This Actor returns one clean, structured record per jurisdiction with the permit, fees, caps and waitlists, owner occupancy, occupancy limits, parking, taxes, renewal steps and recent rule changes, plus the official source links and the date each record was last checked.

Built and maintained by Keel & Charter.

### What you get

12 jurisdictions around Charleston, the sea islands and the Grand Strand:

| Area | County |
|---|---|
| City of Charleston | Charleston, Berkeley |
| Charleston County (unincorporated) | Charleston |
| Mount Pleasant | Charleston |
| Folly Beach | Charleston |
| Isle of Palms | Charleston |
| Sullivan's Island | Charleston |
| Kiawah Island | Charleston |
| Seabrook Island | Charleston |
| Edisto Beach | Colleton |
| North Charleston | Charleston, Dorchester, Berkeley |
| Summerville | Dorchester, Berkeley, Charleston |
| Myrtle Beach and Horry County | Horry |

Each record has:

- `jurisdiction`, `jurisdictionId`, `state`, `county`
- `permitRequired` (true or false) and `permitType`
- `allowedZones`, `fees`, `caps`, `ownerOccupancy`, `occupancyLimits`, `parking`
- `taxes` and `taxTotalPercent` (filled only when the source states a combined total; otherwise null so you never get a guessed number)
- `registrationAndRenewal`, `recentChanges`, `hasPendingChanges`
- `sourceUrl` (primary official source), `sourceUrls` (all sources), `sourcesByTopic` (sources for each topic)
- `lastChecked` (date the record was last verified against its sources)

### Who it is for

- Investors screening a town before making an offer
- Property managers onboarding a new owner
- Hosts checking permit, renewal and tax steps
- Analysts, lenders and data teams who want rules as data, not as 40 PDF pages

### Input

| Field | What it does |
|---|---|
| `jurisdictions` | Names or ids to return, for example `folly-beach` or `Mount Pleasant`. Empty returns all. |
| `county` | Only jurisdictions in this county, for example `Charleston`. |
| `keyword` | Only records that mention a word, for example `owner occupied`. |
| `onlyPendingChanges` | Only places with a proposed or scheduled rule change. |
| `includeSourcesByTopic` | Add source links for each topic. On by default. |
| `maxItems` | Stop after this many records. 0 means no limit. |

Example input:

```json
{ "jurisdictions": ["folly-beach", "isle-of-palms"], "includeSourcesByTopic": true }
```

### Example output

```json
{
  "jurisdiction": "Isle of Palms",
  "county": "Charleston",
  "permitRequired": true,
  "taxTotalPercent": 14.0,
  "hasPendingChanges": false,
  "sourceUrl": "https://...",
  "lastChecked": "2026-10-25"
}
```

A full sample is in the Output tab of every run.

### Pricing

Pay per event, no subscription and no separate compute charge:

| Event | Price |
|---|---|
| Jurisdiction record | $0.02 per record |
| Actor start | $0.00005 per run |

Example: all 12 jurisdictions in one run cost $0.24.

Pricing may change; any change follows Apify's notice rules.

### How the data is built

Every field is compiled from official public sources: town, city and county codes of ordinances, short term rental program pages, and South Carolina Department of Revenue pages. No personal data is collected. Where a value could not be confirmed it says `unknown` rather than guessing. Rules change, so always confirm with the linked source before you rely on a record for a purchase or a permit.

### Not legal advice

This dataset is a research aid, not legal or tax advice. The official source linked in each record governs.

### Feedback

Spot a change or want another town covered? Open an issue on the Issues tab and Keel & Charter will take a look.

### FAQ

**Which towns are covered?**
Charleston, Charleston County, Mount Pleasant, Folly Beach, Isle of Palms, Sullivan's Island, Kiawah Island, Seabrook Island, Edisto Beach, North Charleston, Summerville, and Myrtle Beach with Horry County.

**How fresh is the data?**
Every record carries lastChecked. Sources are rechecked monthly and the Actor is rebuilt after each check.

### More from Keel & Charter

- [Greenhouse, Lever, Ashby and Workable Jobs Scraper](https://apify.com/keelandcharter/ats-jobs-feed)
- [Workday Jobs Scraper](https://apify.com/keelandcharter/workday-jobs-feed)
- [Bulk WHOIS and Domain Lookup (RDAP, DNS, SPF, DMARC)](https://apify.com/keelandcharter/domain-rdap-dns-lookup)
- [Wayback Machine Domain History](https://apify.com/keelandcharter/wayback-domain-history)

# Actor input Schema

## `jurisdictions` (type: `array`):

Town, city or county names or ids to return, for example folly-beach or Mount Pleasant. Leave empty for all 12.

## `county` (type: `string`):

Only return jurisdictions in this county, for example Charleston, Horry or Colleton.

## `keyword` (type: `string`):

Only return records whose text contains this word, for example waitlist, owner occupied or accommodations.

## `onlyPendingChanges` (type: `boolean`):

Return only places with a proposed or scheduled rule change.

## `includeSourcesByTopic` (type: `boolean`):

Add the official source links for each topic (fees, taxes, caps and so on).

## `maxItems` (type: `integer`):

Stop after this many records. 0 means no limit.

## Actor input object example

```json
{
  "jurisdictions": [
    "folly-beach",
    "isle-of-palms"
  ],
  "onlyPendingChanges": false,
  "includeSourcesByTopic": true,
  "maxItems": 0
}
```

# Actor output Schema

## `results` (type: `string`):

All jurisdiction records returned by the run, in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "jurisdictions": [
        "folly-beach",
        "isle-of-palms"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("keelandcharter/sc-short-term-rental-rules").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "jurisdictions": [
        "folly-beach",
        "isle-of-palms",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("keelandcharter/sc-short-term-rental-rules").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "jurisdictions": [
    "folly-beach",
    "isle-of-palms"
  ]
}' |
apify call keelandcharter/sc-short-term-rental-rules --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,keelandcharter/sc-short-term-rental-rules"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/G8FuSE10DGxoR6apq/builds/8RCYwDcV7N0GD0B1l/openapi.json
