diff --git a/airbyte-integrations/connectors/source-acuity-scheduling/README.md b/airbyte-integrations/connectors/source-acuity-scheduling/README.md
new file mode 100644
index 00000000000..8a3f95f31c2
--- /dev/null
+++ b/airbyte-integrations/connectors/source-acuity-scheduling/README.md
@@ -0,0 +1,34 @@
+# Acuity Scheduling
+This directory contains the manifest-only connector for `source-acuity-scheduling`.
+
+Flexible scheduling software to help you succeed
+With seamless client scheduling, secure payments, and workflow automation, all you have to do is show up on time.
+
+## Usage
+There are multiple ways to use this connector:
+- You can use this connector as any other connector in Airbyte Marketplace.
+- You can load this connector in `pyairbyte` using `get_source`!
+- You can open this connector in Connector Builder, edit it, and publish to your workspaces.
+
+Please refer to the manifest-only connector documentation for more details.
+
+## Local Development
+We recommend you use the Connector Builder to edit this connector.
+
+But, if you want to develop this connector locally, you can use the following steps.
+
+### Environment Setup
+You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci).
+
+### Build
+This will create a dev image (`source-acuity-scheduling:dev`) that you can use to test the connector locally.
+```bash
+airbyte-ci connectors --name=source-acuity-scheduling build
+```
+
+### Test
+This will run the acceptance tests for the connector.
+```bash
+airbyte-ci connectors --name=source-acuity-scheduling test
+```
+
diff --git a/airbyte-integrations/connectors/source-acuity-scheduling/acceptance-test-config.yml b/airbyte-integrations/connectors/source-acuity-scheduling/acceptance-test-config.yml
new file mode 100644
index 00000000000..1ae6363356a
--- /dev/null
+++ b/airbyte-integrations/connectors/source-acuity-scheduling/acceptance-test-config.yml
@@ -0,0 +1,17 @@
+# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference)
+# for more information about how to configure these tests
+connector_image: airbyte/source-acuity-scheduling:dev
+acceptance_tests:
+ spec:
+ tests:
+ - spec_path: "manifest.yaml"
+ connection:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ discovery:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ basic_read:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ incremental:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ full_refresh:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
diff --git a/airbyte-integrations/connectors/source-acuity-scheduling/icon.svg b/airbyte-integrations/connectors/source-acuity-scheduling/icon.svg
new file mode 100644
index 00000000000..cf5618012c9
--- /dev/null
+++ b/airbyte-integrations/connectors/source-acuity-scheduling/icon.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/airbyte-integrations/connectors/source-acuity-scheduling/manifest.yaml b/airbyte-integrations/connectors/source-acuity-scheduling/manifest.yaml
new file mode 100644
index 00000000000..3c97ebe7827
--- /dev/null
+++ b/airbyte-integrations/connectors/source-acuity-scheduling/manifest.yaml
@@ -0,0 +1,778 @@
+version: 6.48.15
+
+type: DeclarativeSource
+
+description: >-
+ Flexible scheduling software to help you succeed
+
+ With seamless client scheduling, secure payments, and workflow automation, all
+ you have to do is show up on time.
+
+check:
+ type: CheckStream
+ stream_names:
+ - appointments
+
+definitions:
+ streams:
+ appointments:
+ type: DeclarativeStream
+ name: appointments
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: appointments
+ http_method: GET
+ request_parameters:
+ max: "100000"
+ showall: "true"
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: insert_date
+ lookback_window: P1W
+ cursor_datetime_formats:
+ - "%Y-%m-%d"
+ datetime_format: "%Y-%m-%d"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: "{{ config[\"start_date\"] }}"
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ start_time_option:
+ type: RequestOption
+ field_name: minDate
+ inject_into: request_parameter
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: "{{ now_utc().strftime('%Y-%m-%dT%H:%M:%SZ') }}"
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ transformations:
+ - type: AddFields
+ fields:
+ - type: AddedFieldDefinition
+ path:
+ - insert_date
+ value: "{{ stream_slice.start_time }}"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/appointments"
+ calendars:
+ type: DeclarativeStream
+ name: calendars
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: calendars
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/calendars"
+ clients:
+ type: DeclarativeStream
+ name: clients
+ primary_key:
+ - email
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: clients
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/clients"
+ appointment-types:
+ type: DeclarativeStream
+ name: appointment-types
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: appointment-types
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/appointment-types"
+ blocks:
+ type: DeclarativeStream
+ name: blocks
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: blocks
+ http_method: GET
+ request_parameters:
+ max: "10000"
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: insert_date
+ lookback_window: P1W
+ cursor_datetime_formats:
+ - "%Y-%m-%d"
+ datetime_format: "%Y-%m-%d"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: "{{ config[\"start_date\"] }}"
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ start_time_option:
+ type: RequestOption
+ field_name: minDate
+ inject_into: request_parameter
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: "{{ now_utc().strftime('%Y-%m-%dT%H:%M:%SZ') }}"
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ transformations:
+ - type: AddFields
+ fields:
+ - type: AddedFieldDefinition
+ path:
+ - insert_date
+ value: "{{ stream_slice.start_time }}"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/blocks"
+ labels:
+ type: DeclarativeStream
+ name: labels
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: labels
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/labels"
+ forms:
+ type: DeclarativeStream
+ name: forms
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: forms
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ decoder:
+ type: JsonDecoder
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/forms"
+ base_requester:
+ type: HttpRequester
+ url_base: https://acuityscheduling.com/api/v1
+ authenticator:
+ type: BasicHttpAuthenticator
+ password: "{{ config[\"password\"] }}"
+ username: "{{ config[\"username\"] }}"
+
+streams:
+ - $ref: "#/definitions/streams/appointments"
+ - $ref: "#/definitions/streams/calendars"
+ - $ref: "#/definitions/streams/clients"
+ - $ref: "#/definitions/streams/appointment-types"
+ - $ref: "#/definitions/streams/blocks"
+ - $ref: "#/definitions/streams/labels"
+ - $ref: "#/definitions/streams/forms"
+
+spec:
+ type: Spec
+ connection_specification:
+ type: object
+ $schema: http://json-schema.org/draft-07/schema#
+ required:
+ - username
+ - start_date
+ properties:
+ username:
+ type: string
+ order: 0
+ title: Username
+ password:
+ type: string
+ order: 1
+ title: Password
+ always_show: true
+ airbyte_secret: true
+ start_date:
+ type: string
+ order: 2
+ title: Start date
+ format: date-time
+ pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
+ additionalProperties: true
+
+metadata:
+ autoImportSchema:
+ appointments: true
+ calendars: true
+ clients: true
+ appointment-types: true
+ blocks: true
+ labels: true
+ forms: true
+ testedStreams:
+ appointments:
+ streamHash: 583df5d3ff7b1808cfa5e2dd5cf6b6f7b82c3818
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ calendars:
+ streamHash: 0f0b6fd2e19930c693406ff8b814bd1b27ebe771
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ clients:
+ streamHash: 5b5ad6fd3c8e0552d1082c89924b189a96908dad
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ appointment-types:
+ streamHash: 610a45f21f5fc27da24e3a7b38f942772cdb970c
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ blocks:
+ streamHash: 135acc647612c65d16606b1de8f7c680e1e946b9
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ labels:
+ streamHash: 8b72b44745acf2445c0a67a3515991dbb2bfb318
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ forms:
+ streamHash: 2b13ee3df2f1f1b2a30171de8f1d826865690b96
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ assist: {}
+
+schemas:
+ appointments:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ type:
+ type:
+ - string
+ - "null"
+ addonIDs:
+ type:
+ - array
+ - "null"
+ amountPaid:
+ type:
+ - string
+ - "null"
+ appointmentTypeID:
+ type:
+ - number
+ - "null"
+ calendar:
+ type:
+ - string
+ - "null"
+ calendarID:
+ type:
+ - number
+ - "null"
+ calendarTimezone:
+ type:
+ - string
+ - "null"
+ canClientCancel:
+ type:
+ - boolean
+ - "null"
+ canClientReschedule:
+ type:
+ - boolean
+ - "null"
+ canceled:
+ type:
+ - boolean
+ - "null"
+ category:
+ type:
+ - string
+ - "null"
+ confirmationPage:
+ type:
+ - string
+ - "null"
+ confirmationPagePaymentLink:
+ type:
+ - string
+ - "null"
+ date:
+ type:
+ - string
+ - "null"
+ dateCreated:
+ type:
+ - string
+ - "null"
+ datetime:
+ type:
+ - string
+ - "null"
+ datetimeCreated:
+ type:
+ - string
+ - "null"
+ duration:
+ type:
+ - string
+ - "null"
+ email:
+ type:
+ - string
+ - "null"
+ endTime:
+ type:
+ - string
+ - "null"
+ firstName:
+ type:
+ - string
+ - "null"
+ forms:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ id:
+ type:
+ - number
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ values:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ fieldID:
+ type:
+ - number
+ - "null"
+ id:
+ type:
+ - number
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ value:
+ type:
+ - string
+ - "null"
+ formsText:
+ type:
+ - string
+ - "null"
+ id:
+ type: number
+ insert_date:
+ type: string
+ lastName:
+ type:
+ - string
+ - "null"
+ location:
+ type:
+ - string
+ - "null"
+ notes:
+ type:
+ - string
+ - "null"
+ paid:
+ type:
+ - string
+ - "null"
+ phone:
+ type:
+ - string
+ - "null"
+ price:
+ type:
+ - string
+ - "null"
+ priceSold:
+ type:
+ - string
+ - "null"
+ time:
+ type:
+ - string
+ - "null"
+ timezone:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ - insert_date
+ calendars:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ email:
+ type:
+ - string
+ - "null"
+ id:
+ type: number
+ image:
+ type:
+ - boolean
+ - "null"
+ location:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ replyTo:
+ type:
+ - string
+ - "null"
+ thumbnail:
+ type:
+ - boolean
+ - "null"
+ timezone:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ clients:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ email:
+ type: string
+ firstName:
+ type:
+ - string
+ - "null"
+ lastName:
+ type:
+ - string
+ - "null"
+ notes:
+ type:
+ - string
+ - "null"
+ phone:
+ type:
+ - string
+ - "null"
+ required:
+ - email
+ appointment-types:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ type:
+ type:
+ - string
+ - "null"
+ description:
+ type:
+ - string
+ - "null"
+ active:
+ type:
+ - boolean
+ - "null"
+ addonIDs:
+ type:
+ - array
+ - "null"
+ calendarIDs:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - number
+ - "null"
+ category:
+ type:
+ - string
+ - "null"
+ color:
+ type:
+ - string
+ - "null"
+ duration:
+ type:
+ - number
+ - "null"
+ formIDs:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - number
+ - "null"
+ id:
+ type: number
+ image:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ paddingAfter:
+ type:
+ - number
+ - "null"
+ paddingBefore:
+ type:
+ - number
+ - "null"
+ price:
+ type:
+ - string
+ - "null"
+ private:
+ type:
+ - boolean
+ - "null"
+ schedulingUrl:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ blocks:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ calendarID:
+ type:
+ - number
+ - "null"
+ calendarTimezone:
+ type:
+ - string
+ - "null"
+ end:
+ type:
+ - string
+ - "null"
+ id:
+ type: number
+ insert_date:
+ type: string
+ managed:
+ type:
+ - boolean
+ - "null"
+ notes:
+ type:
+ - string
+ - "null"
+ serviceGroupID:
+ type:
+ - number
+ - "null"
+ start:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ - insert_date
+ labels:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ color:
+ type:
+ - string
+ - "null"
+ id:
+ type: number
+ name:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ forms:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ appointmentTypeIDs:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - number
+ - "null"
+ fields:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ type:
+ type:
+ - string
+ - "null"
+ id:
+ type:
+ - number
+ - "null"
+ lines:
+ type:
+ - number
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ required:
+ type:
+ - boolean
+ - "null"
+ hidden:
+ type:
+ - boolean
+ - "null"
+ id:
+ type: number
+ name:
+ type:
+ - string
+ - "null"
+ required:
+ - id
diff --git a/airbyte-integrations/connectors/source-acuity-scheduling/metadata.yaml b/airbyte-integrations/connectors/source-acuity-scheduling/metadata.yaml
new file mode 100644
index 00000000000..ef9c4588803
--- /dev/null
+++ b/airbyte-integrations/connectors/source-acuity-scheduling/metadata.yaml
@@ -0,0 +1,35 @@
+metadataSpecVersion: "1.0"
+data:
+ allowedHosts:
+ hosts:
+ - "acuityscheduling.com"
+ registryOverrides:
+ oss:
+ enabled: true
+ cloud:
+ enabled: true
+ remoteRegistries:
+ pypi:
+ enabled: false
+ packageName: airbyte-source-acuity-scheduling
+ connectorBuildOptions:
+ baseImage: docker.io/airbyte/source-declarative-manifest:6.57.0@sha256:d3e766c04130e607773c1ed8e3ef82b1b932ad514e15b3bb78f0ee13ab59d03d
+ connectorSubtype: api
+ connectorType: source
+ definitionId: bc7db25c-bdfb-4ec2-96ae-a4687cead916
+ dockerImageTag: 0.0.1
+ dockerRepository: airbyte/source-acuity-scheduling
+ githubIssueLabel: source-acuity-scheduling
+ icon: icon.svg
+ license: MIT
+ name: Acuity Scheduling
+ releaseDate: 2025-07-02
+ releaseStage: alpha
+ supportLevel: community
+ documentationUrl: https://docs.airbyte.com/integrations/sources/acuity-scheduling
+ tags:
+ - language:manifest-only
+ - cdk:low-code
+ ab_internal:
+ ql: 100
+ sl: 100
diff --git a/docs/integrations/sources/acuity-scheduling.md b/docs/integrations/sources/acuity-scheduling.md
new file mode 100644
index 00000000000..fe0d4219411
--- /dev/null
+++ b/docs/integrations/sources/acuity-scheduling.md
@@ -0,0 +1,33 @@
+# Acuity Scheduling
+Flexible scheduling software to help you succeed
+With seamless client scheduling, secure payments, and workflow automation, all you have to do is show up on time.
+
+## Configuration
+
+| Input | Type | Description | Default Value |
+|-------|------|-------------|---------------|
+| `username` | `string` | Username. | |
+| `password` | `string` | Password. | |
+| `start_date` | `string` | Start date. | |
+
+## Streams
+| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental |
+|-------------|-------------|------------|---------------------|----------------------|
+| appointments | id | No pagination | ✅ | ✅ |
+| calendars | id | No pagination | ✅ | ❌ |
+| clients | email | No pagination | ✅ | ❌ |
+| appointment-types | id | No pagination | ✅ | ❌ |
+| blocks | id | No pagination | ✅ | ✅ |
+| labels | id | No pagination | ✅ | ❌ |
+| forms | id | No pagination | ✅ | ❌ |
+
+## Changelog
+
+
+ Expand to review
+
+| Version | Date | Pull Request | Subject |
+|------------------|-------------------|--------------|----------------|
+| 0.0.1 | 2025-07-02 | | Initial release by [@chanronson](https://github.com/chanronson) via Connector Builder |
+
+