{"id":19206782,"url":"https://github.com/hausgold/immoscout","last_synced_at":"2026-03-02T22:46:15.905Z","repository":{"id":56877488,"uuid":"107374942","full_name":"hausgold/immoscout","owner":"hausgold","description":"Ruby client for the Immobilienscout24 REST API","archived":false,"fork":false,"pushed_at":"2025-05-12T08:53:53.000Z","size":453,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-12T10:03:42.468Z","etag":null,"topics":["api","api-client","api-wrapper","gem","immobilienscout24","oss","ruby","ruby-gem"],"latest_commit_sha":null,"homepage":"https://rubygems.org/gems/immoscout","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hausgold.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-10-18T07:42:50.000Z","updated_at":"2025-05-12T08:53:56.000Z","dependencies_parsed_at":"2024-07-08T04:29:06.678Z","dependency_job_id":"612bdb08-0717-49c0-a71b-b33b2dcc45ad","html_url":"https://github.com/hausgold/immoscout","commit_stats":{"total_commits":114,"total_committers":5,"mean_commits":22.8,"dds":"0.24561403508771928","last_synced_commit":"d985713b5e101e186f51ee5832ec27fd782e8dc3"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hausgold%2Fimmoscout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hausgold%2Fimmoscout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hausgold%2Fimmoscout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hausgold%2Fimmoscout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hausgold","download_url":"https://codeload.github.com/hausgold/immoscout/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253717586,"owners_count":21952514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-client","api-wrapper","gem","immobilienscout24","oss","ruby","ruby-gem"],"created_at":"2024-11-09T13:17:00.081Z","updated_at":"2026-03-02T22:46:10.878Z","avatar_url":"https://github.com/hausgold.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Immoscout](doc/assets/project.svg)\n\n[![Continuous Integration](https://github.com/hausgold/immoscout/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/hausgold/immoscout/actions/workflows/test.yml)\n[![Gem Version](https://badge.fury.io/rb/immoscout.svg)](https://badge.fury.io/rb/immoscout)\n[![Test Coverage](https://automate-api.hausgold.de/v1/coverage_reports/immoscout/coverage.svg)](https://knowledge.hausgold.de/coverage)\n[![Test Ratio](https://automate-api.hausgold.de/v1/coverage_reports/immoscout/ratio.svg)](https://knowledge.hausgold.de/coverage)\n[![API docs](https://automate-api.hausgold.de/v1/coverage_reports/immoscout/documentation.svg)](https://www.rubydoc.info/gems/immoscout)\n\nThis gem provides an API wrapper for the [Immobilienscout24 REST\nAPI](https://api.immobilienscout24.de/our-apis/import-export.html). It provides\nthe well known _ActiveRecord-like_ model methods.\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Configuration](#configuration)\n  - [Models](#models)\n    - [Real Estates](#real-estates)\n      - [Overview supported actions](#overview-supported-actions)\n      - [Initialize](#initialize)\n      - [Find](#find)\n      - [Create \u0026 Update \u0026 Destroy](#create--update--destroy)\n      - [Publish \u0026 Unpublish](#publish--unpublish)\n      - [Ontop-Placement](#ontop-placement)\n    - [Contact](#contact)\n      - [Overview supported actions](#overview-supported-actions-1)\n    - [Publish](#publish)\n      - [Overview supported actions](#overview-supported-actions-2)\n    - [Attachment (Picture \u0026 Document)](#attachment-picture--document)\n      - [Overview supported actions](#overview-supported-actions-3)\n- [Development](#development)\n- [Code of Conduct](#code-of-conduct)\n- [Contributing](#contributing)\n- [Releasing](#releasing)\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'immoscout'\n```\n\nAnd then execute:\n\n```bash\n$ bundle\n```\n\nOr install it yourself as:\n\n```bash\n$ gem install immoscout\n```\n\n## Usage\n\n### Configuration\n\n```ruby\nImmoscout.configure do |config|\n  config.consumer_key = \"key\"\n  config.consumer_secret = \"secret\"\n  config.oauth_token = \"token\"\n  config.oauth_token_secret = \"token_secret\"\n  config.use_sandbox = true # default: false\n  config.user_name = \"immoscout-user-name\" # default: 'me'\nend\n```\n\n### Models\n\n#### Real Estates\n\nCurrently supported: `ApartmentBuy`, `HouseBuy`\n\n##### Overview supported actions\n* .find(id)\n* .all\n* .first\n* .last\n* .new(hash)\n* .from_raw(remote_hash_or_json)\n* .create(hash)\n* #save\n* #destroy\n* #publish\n* #unpublish\n* #place(placement_type)\n* #unplace(placement_type)\n\n##### Initialize\n```ruby\n# initialize with hash\nhouse = Immoscout::Models::HouseBuy.new(title: \"test\", address: {street: \"thestreet\"})\n# =\u003e #\u003cImmoscout::Models::HouseBuy:0x0055c9fbbc6ea0 @address=#\u003cImmoscout::Models::Parts::Address:0x0055c9fbbc6888 @street=\"thestreet\"\u003e, @title=\"test\"\u003e\n\n# initialize with attribute writers\nhouse = Immoscout::Models::HouseBuy.new\n# =\u003e #\u003cImmoscout::Models::HouseBuy:0x0055d31f734838\u003e\nhouse.title = \"another title\"\n# =\u003e \"another title\"\n\n# access nested attributes\nhouse.build_address\n# =\u003e #\u003cImmoscout::Models::Parts::Address:0x0055c9fbc77d18\u003e\nhouse.address.street = \"another street\"\n\n# lookup all allowed first-level attributes\nhouse.attributes\n# =\u003e [:address, :api_search_data, :building_energy_rating_type, ...]\nhouse.address.attributes\n# =\u003e [:city, :house_number, :postcode, :street, ...]\n```\n\n##### Find\n```ruby\napartment = Immoscout::Models::ApartmentBuy.find('ID')\n# =\u003e #\u003cImmoscout::Models::ApartmentBuy:0x0055c9fbfa0648\u003e\napartment.address.street\n# =\u003e 'Orig street name'\n```\n##### Create \u0026 Update \u0026 Destroy\n```ruby\napartment = Immoscout::Models::ApartmentBuy.find('ID')\napartment.address.street = \"Changed street\"\napartment.save\n# =\u003e #\u003cImmoscout::Models::ApartmentBuy:0x0055c9fbfa0648\u003e\n\nhouse = Immoscout::Models::HouseBuy.find('9473634')\nhouse.destroy\n# =\u003e #\u003cImmoscout::Models::HouseBuy:0x0055d31f734838\u003e\n```\n\n##### Publish \u0026 Unpublish\n```ruby\napartment = Immoscout::Models::ApartmentBuy.find('ID')\n# =\u003e #\u003cImmoscout::Models::ApartmentBuy:0x0055c9fbfa0648\u003e\napartment.publish\n# =\u003e #\u003cImmoscout::Models::Publish:0x0085a2fbfa0688\u003e\napartment.unpublish\n# =\u003e #\u003cImmoscout::Models::Publish:0x00831b2fbfc1234\u003e\n```\n\n##### Ontop-Placement\n```ruby\n# allowed placement types: showcaseplacement, premiumplacement, topplacement\napartment = Immoscout::Models::ApartmentBuy.find('ID')\n# add premiumplacement\napartment.place(:premiumplacement)\n# =\u003e #\u003cImmoscout::Models::ApartmentBuy:0x0055c9fbfa0648\u003e\n# remove premiumplacement\napartment.unplace(:premiumplacement)\n# =\u003e #\u003cImmoscout::Models::ApartmentBuy:0x0055c9fbfa0648\u003e\n```\n\n#### Contact\n\n##### Overview supported actions\n* .find(id)\n* .all\n* .first\n* .last\n* .new(hash)\n* .from_raw(remote_hash_or_json)\n* .create(hash)\n* #save\n* #destroy\n\n```ruby\ncontact = Immoscout::Models::Contact.new firstname: \"John\", lastname: \"Doe\"\n# =\u003e #\u003cImmoscout::Models::Contact:0x0055c9fb889878 @firstname=\"John\", @lastname=\"Doe\"\u003e\ncontact.email = \"john.doe@example.com\"\ncontact.salutation = \"MALE\"\ncontact.save\n# =\u003e #\u003cImmoscout::Models::Contact:0x0055c9fb889878 @email=\"john.doe@example.com\", @firstname=\"John\", @lastname=\"Doe\", @salutation=\"MALE\"\u003e\n```\n\n#### Publish\n\nIf you don't like or can't use the `#publish` and `#unpublish` methods defined for realestate models, you can create the `Publish` instance yourself.\n\n##### Overview supported actions\n* .new(hash)\n* .from_raw(remote_hash_or_json)\n* #save\n* #destroy\n\n```ruby\n# NOTE: publish_channel#id = 10000 =\u003e publish on immobilienscout24\npublish = Immoscout::Models::Publish.new real_estate: { id: \"ID\" }, publish_channel: {id: 10_000}\n\npublish.save # published!\n# =\u003e #\u003cImmoscout::Models::Publish:0x0055c9faea1fb8\u003e\npublish.destroy # unpublished!\n# =\u003e #\u003cImmoscout::Models::Publish:0x0055c9faea1fb8\u003e\n```\n\n#### Attachment (Picture \u0026 Document)\n\n##### Overview supported actions\n* .new(hash)\n* .from_raw(remote_hash_or_json)\n* #save\n* #destroy\n\n```ruby\npicture = Immoscout::Models::Picture.new title: \"Badezimmer\", title_picture: true, floor_plan: false\npicture.file = File.open(\"the/path/to/the/file.jpg\") #\npicture.attachable = Immoscout::Models::HouseBuy.last # you can also pass the ID\n\npicture.save # attachment upload!\n# =\u003e #\u003cImmoscout::Models::Picture:0x0055c9faea1fb8\u003e\n\npicture.destroy # attachment destroy!\n# =\u003e #\u003cImmoscout::Models::Picture:0x0055c9faea1fb8\u003e\n```\n\n## Development\n\nAfter checking out the repo, run `make install` to install dependencies. Then,\nrun `make test` to run the tests. You can also run `make shell-irb` for an\ninteractive prompt that will allow you to experiment.\n\nTo run specs against the immobilienscout24 sandbox api, you need to create some\nkeys and tokens. Copy the `spec/test_config.yml.example` to\n`spec/test_config.yml` and fill in your generated values.\n\n## Code of Conduct\n\nEveryone interacting in the project codebase, issue tracker, chat\nrooms and mailing lists is expected to follow the [code of\nconduct](./CODE_OF_CONDUCT.md).\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at\nhttps://github.com/hausgold/immoscout. Make sure that every pull request adds\na bullet point to the [changelog](./CHANGELOG.md) file with a reference to the\nactual pull request.\n\n## Releasing\n\nThe release process of this Gem is fully automated. You just need to open the\nGithub Actions [Release\nWorkflow](https://github.com/hausgold/immoscout/actions/workflows/release.yml)\nand trigger a new run via the **Run workflow** button. Insert the new version\nnumber (check the [changelog](./CHANGELOG.md) first for the latest release) and\nyou're done.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhausgold%2Fimmoscout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhausgold%2Fimmoscout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhausgold%2Fimmoscout/lists"}