diff --git a/app/services/projects/import_export/import_export.yml b/app/services/projects/import_export/import_export.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d02ec5df2ff5d6932084cd126d830b10f1f75738
--- /dev/null
+++ b/app/services/projects/import_export/import_export.yml
@@ -0,0 +1,31 @@
+# Class relationships to be included in the import/export
+:project_tree:
+  - :issues
+  - :labels
+  - :milestones
+  - :snippets
+  - :releases
+  - :events
+  - :project_members:
+    - :user
+  - :merge_requests:
+    - :merge_request_diff
+  - :commit_statuses:
+    - :commit
+
+:attributes_only:
+  :project:
+    - :name
+    - :path
+    - :description
+    - :issues_enabled
+    - :wall_enabled
+    - :merge_requests_enabled
+    - :wiki_enabled
+    - :snippets_enabled
+    - :visibility_level
+    - :archived
+  :user:
+    - :id
+    - :email
+    - :username
\ No newline at end of file
diff --git a/app/services/projects/import_export/import_export_reader.rb b/app/services/projects/import_export/import_export_reader.rb
new file mode 100644
index 0000000000000000000000000000000000000000..af8c8c3c2514657a248f08622fc62e74cd5bb70f
--- /dev/null
+++ b/app/services/projects/import_export/import_export_reader.rb
@@ -0,0 +1,47 @@
+module Projects
+  module ImportExport
+    module ImportExportReader
+      extend self
+
+      def project_tree
+        { only: atts_only[:project], include: build_hash(tree) }
+      end
+
+      def config
+        @config ||= YAML.load_file('app/services/projects/import_export/import_export.yml')
+      end
+
+      def atts_only
+        config[:attributes_only]
+      end
+
+      def atts_except
+        config[:attributes_except]
+      end
+
+      def tree
+        config[:project_tree]
+      end
+
+      def build_hash(array)
+        array.map { |el| el.is_a?(Hash) ? process_include(el) : el }
+      end
+
+      def process_include(hash)
+        included_classes_hash = {}
+        hash.values.flatten.each do |value|
+          value = value.is_a?(Hash) ? process_include(hash) : value
+          new_hash = { :include => value }
+          new_hash.merge!(check_only(value))
+          included_classes_hash[hash.keys.first] = new_hash
+        end
+        included_classes_hash
+      end
+
+      def check_only(value)
+        key = value.is_a?(Hash) ? value.keys.first : value
+        atts_only[key].nil? ? {} : { only: atts_only[key] }
+      end
+    end
+  end
+end
\ No newline at end of file